是否有任何方法可以在控件之间共享列宽,而不仅仅是在同一控件上的多个网格之间?
我想要得到的粗略图表:
我目前正在弄乱在每个UserControl的第一列中获取标签的宽度,但它似乎是一个非常繁重的CPU解决方案(找到标签并在呈现之前计算文本的宽度)讨厌!)。
我一直在阅读尽可能多的关于SharedSizeGroups的内容,但是没有任何迹象表明它们可以在不同的控件上工作。有一个简单的解决方案,甚至是一个不那么简单的简单解决方案吗?!
答案 0 :(得分:28)
以前的答案都是正确的。这是一个示例(主要来自MSDN),通过在父容器上设置Grid.IsSharedSizeScope =“True”,如何在两个不同的UserControl上使用它。请注意ColumnDefinition上的SharedSizeGroup属性。您可以通过切换Grid.IsSharedSizeScope True / False
来查看效果<强>主窗口强>
<StackPanel Grid.IsSharedSizeScope="True">
<my:UserControl1 HorizontalAlignment="Left" x:Name="userControl11" />
<my:UserControl2 HorizontalAlignment="Left" x:Name="userControl21" />
</StackPanel>
<强>的UserControl1 强>
<UserControl ...>
<Grid ShowGridLines="True" Margin="0,0,10,0">
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="FirstColumn"/>
<ColumnDefinition SharedSizeGroup="SecondColumn"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" SharedSizeGroup="FirstRow"/>
</Grid.RowDefinitions>
<Rectangle Fill="Silver" Grid.Column="0" Grid.Row="0" Width="200" Height="100"/>
<Rectangle Fill="Blue" Grid.Column="1" Grid.Row="0" Width="150" Height="100"/>
<TextBlock Grid.Column="0" Grid.Row="0" FontWeight="Bold">First Column</TextBlock>
<TextBlock Grid.Column="1" Grid.Row="0" FontWeight="Bold">Second Column</TextBlock>
</Grid>
</UserControl>
<强> UserControl2 强>
<UserControl ...>
<Grid ShowGridLines="True" Margin="0,0,10,0">
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="FirstColumn"/>
<ColumnDefinition SharedSizeGroup="SecondColumn"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" SharedSizeGroup="FirstRow"/>
</Grid.RowDefinitions>
<Rectangle Fill="Silver" Grid.Column="0" Grid.Row="0" />
<Rectangle Fill="Blue" Grid.Column="1" Grid.Row="0" />
<TextBlock Grid.Column="0" Grid.Row="0" FontWeight="Bold">First Column</TextBlock>
<TextBlock Grid.Column="1" Grid.Row="0" FontWeight="Bold">Second Column</TextBlock>
</Grid>
</UserControl>
答案 1 :(得分:8)
您应该在包含UserControls的控件上将IsSharedSizeScope属性设置为true
答案 2 :(得分:5)
您是否尝试在每个用户控件上设置Grid.IsSharedSizeScope =“True”?