Grid的SharedSizeGroup和*大小调整

时间:2011-01-11 23:53:23

标签: wpf xaml layout wpf-controls grid

我有一个用户控件,称之为UserControl,它有一个包含以下列定义的网格:

<Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" SharedSizeGroup="A"/>
            <ColumnDefinition Width="Auto" SharedSizeGroup="B"/>
            <ColumnDefinition Width="*" SharedSizeGroup="C"/>
            <ColumnDefinition Width="Auto" SharedSizeGroup="D"/>
            <ColumnDefinition MinWidth="30" Width="*" SharedSizeGroup="E"/>
            <ColumnDefinition MinWidth="30" Width="*" SharedSizeGroup="F"/>
            <ColumnDefinition Width="110" SharedSizeGroup="G"/>
            <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="H"/>
            <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="I"/>
            <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="J"/>
            <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="K"/>
            <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="L"/>
</Grid.ColumnDefinitions>

我还有MainWindow,它包含一个网格本身,并在网格上定义了以下属性:

Grid.IsSharedSizeScope="True"

现在,我在MainWindow的网格中添加了几个UserControl(每个都是一个单独的行)。我的目标是让不同UserControls的每个列宽保持同步。除了一件事,使用SharedSizeGroup时一切正常。似乎任何宽度为*的列都不会表现得如此。看起来像*列宽度被设置为好像它们是自动的。

SharedSizeGroup和*大小调整是否有任何限制/问题?这似乎是保持列宽度同步的最佳方法,但我似乎无法解决这个问题。

感谢。

1 个答案:

答案 0 :(得分:52)

MSDN

  

参与的列和行   大小分享不尊重星   浆纱。在大小共享方案中,   星号大小被视为自动

如果您使用星号,则所有列的宽度都相同,因此如果您不介意自动调整大小,则应为所有列分配相同的SharedSizeGroup

<Grid.ColumnDefinitions>
    <ColumnDefinition Width="Auto" SharedSizeGroup="A"/>
    <ColumnDefinition Width="Auto" SharedSizeGroup="B"/>
    <ColumnDefinition Width="*" SharedSizeGroup="StarDontWork"/>
    <ColumnDefinition Width="Auto" SharedSizeGroup="D"/>
    <ColumnDefinition MinWidth="30" Width="*" SharedSizeGroup="StarDontWork"/>
    <ColumnDefinition MinWidth="30" Width="*" SharedSizeGroup="StarDontWork"/>
    <ColumnDefinition Width="110" SharedSizeGroup="G"/>
    <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="H"/>
    <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="I"/>
    <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="J"/>
    <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="K"/>
    <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="L"/>
</Grid.ColumnDefinitions>

(根据这种行为,您可以在设置Width时删除SharedSizeGroup属性


您可以推断,如果所有自动调整大小的列都在共享大小组中,那么所有星号大小的列都将具有相同的大小,因为范围中的每个网格都将具有相同数量的未使用空间,这些空间将分配给星形大小的列。

一个简单的例子:

<Grid.ColumnDefinitions>
    <ColumnDefinition SharedSizeGroup="A"/>
    <ColumnDefinition SharedSizeGroup="B" Width="*"/>
    <ColumnDefinition SharedSizeGroup="C"/>
</Grid.ColumnDefinitions>

正如所解释的,Width="*"不会执行任何操作,但由于列02已同步,因此列1也必须同步,因此您可以放弃SharedSizeGroup

<Grid.ColumnDefinitions>
    <ColumnDefinition SharedSizeGroup="A"/>
    <ColumnDefinition Width="*"/>
    <ColumnDefinition SharedSizeGroup="C"/>
</Grid.ColumnDefinitions>