Fla*_*ack 38 wpf grid layout xaml wpf-controls
我有一个用户控件,称之为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>
Run Code Online (Sandbox Code Playgroud)
我还有MainWindow,它包含一个网格本身,在网格上定义了以下属性:
Grid.IsSharedSizeScope="True"
Run Code Online (Sandbox Code Playgroud)
现在,我在MainWindow的网格中添加了几个UserControl(每个都是一个单独的行).我的目标是让不同UserControls的每个列宽保持同步.除了一件事,使用SharedSizeGroup时一切正常.似乎任何宽度为*的列都不会表现得如此.看起来*列宽度设置为好像它们是Auto.
SharedSizeGroup和*大小调整是否有任何限制/问题?这似乎是保持列宽度同步的最佳方法,但我似乎无法解决这个问题.
谢谢.
H.B*_*.B. 52
MSDN:
参与大小共享的列和行不尊重Star大小调整.在大小共享方案中,Star大小调整被视为自动
如果你使用星号,那么所有列的宽度都是相同的,所以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>
Run Code Online (Sandbox Code Playgroud)
(从这种行为来看,你可以Width在SharedSizeGroup设置时删除属性)
您可以推断,如果所有自动调整大小的列都在共享大小组中,则所有星号大小列将具有相同的大小,因为范围中的每个网格将具有相同数量的未使用空间,这些空间将分配给星号大小的列.
一个简单的例子:
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="A"/>
<ColumnDefinition SharedSizeGroup="B" Width="*"/>
<ColumnDefinition SharedSizeGroup="C"/>
</Grid.ColumnDefinitions>
Run Code Online (Sandbox Code Playgroud)
如上所述,它Width="*"不会做任何事情,但作为列0和2同步,列1也必须同步,所以你可以删除SharedSizeGroup:
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="A"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition SharedSizeGroup="C"/>
</Grid.ColumnDefinitions>
Run Code Online (Sandbox Code Playgroud)