1

widths で定義された 3 つの列を持つ Silverlight 5.0 Grid があります"Auto", "*", and "Auto"。2 番目の列内には、幅で定義された 4 つの列を持つ別の Grid があります"25*"。これら 4 つの列はそれぞれ ComboBox です。

幅はすべて同じに定義されていますが、ComboBoxes の「自動」サイズはそれ自体であり、1 つを選択すると、ボックス自体は下向き矢印よりもわずかに大きくなりますが、アイテムは収まるサイズになっています。

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="Auto"/>
    </Grid.ColumnDefinitions>
<ContentControl Grid.Column="0" FontSize="20" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="10,1,0,1">
    <ContentPresenter Content="This is a Label" />
</ContentControl>
    <Grid Grid.Column="1" HorizontalAlignment="Center">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="25*"/>
            <ColumnDefinition Width="25*"/>
            <ColumnDefinition Width="25*"/>
            <ColumnDefinition Width="25*"/>
        </Grid.ColumnDefinitions>
        <ComboBox Grid.Column="0" Name="comboView" FontSize="14" Margin="2,1,2,1" >
            <ComboBox.Items>
                <ComboBoxItem Content="Item1" IsSelected="True" />
                <ComboBoxItem Content="Item2" />
            </ComboBox.Items>
        </ComboBox>
        <ComboBox Grid.Column="1" Name="comboField" FontSize="14" Margin="2,1,2,1" >
            <ComboBox.Items>
                <ComboBoxItem Content="Field1" IsSelected="True" />
                <ComboBoxItem Content="Field2" />
            </ComboBox.Items>
        </ComboBox>

...

私は何を逃したのですか?グリッドが 1 つだけで、最初の列が に設定されAuto、残りのすべてが のように設定されているWidth=9*場合、ComboBoxes はこのように動作しませんでした。

さらに観察するとHorizontalAlignment="Center"、内側のグリッドが原因であることがわかります。それを削除すると、ComboBoxes はサイズを保持するように戻りますが、必要なスペースを占有してから外側の列の中央に配置する場合、外側の列 1 全体を占有します。

4

1 に答える 1

0

私が正しく理解している場合、あなたの最大の問題は、すべてのコンボボックスを同じ幅にし、すべて同じ量のスペースを占有することです(つまり、すべてのサイズが最大サイズのコンボボックスと同じです)。私はあなたが他のすべてをまっすぐにしたと信じています。

これは、WPF では非常に簡単です。グリッド幅を均等に分配する 「 IsSharedSizeScope 」という名前のプロパティがあります。

Silverlight にはそのようなプロパティはありません。これを行うには、それぞれのサイズをバインドし、コード ビハインドで実行する必要があります。ちょっとハックですが、うまくいくはずです。それらすべてについて、次のようなものがあります。

<ComboBox Grid.Column="1" Name="comboField" FontSize="14" Margin="2,1,2,1" Width="{Binding Path=Width}" SizeChanged="comboField_SizeChanged">

次に、コードビハインドで:

GridLength Width = new GridLength(10);

private void comboField_SizeChanged(object sender, SizeChangedEventArgs e)
{
    if (e.NewSize.Width > len.Value)
    {
        Width = new GridLength( e.NewSize.Width );
    }
}

編集:あなたが望むのと同じことをするように見える このライブラリもあります。

于 2012-08-29T14:05:49.183 に答える