共享多个WPF控件之间的列宽

Cat*_*top 19 wpf

是否有任何方法可以在控件之间共享列宽,而不仅仅是在同一控件上的多个网格之间?

我想要得到的原始图表:

替代文字

我目前正忙着在每个UserControl的第一列中获取标签的宽度,但它似乎是一个混乱的解决方案,相当CPU重(找到标签并计算文本的宽度,在它呈现之前是讨厌的!) .

我一直在阅读尽可能多的关于SharedSizeGroups的内容,但没有任何迹象表明它们可以在不同的控件上工作.有一个简单的解决方案,甚至是一个不那么简单的简单解决方案吗?!

Fre*_*lad 30

以前的答案都是正确的.这是一个示例(主要来自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>
Run Code Online (Sandbox Code Playgroud)

的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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)


Wou*_*ter 9

您应该在包含UserControls的控件上将IsSharedSizeScope属性设置为true


Col*_*inE 6

您是否尝试过在每个用户控件上设置Grid.IsSharedSizeScope =“ True”?