我有一个用户控件,称为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中将几个UserControls添加到了网格中(每个控件都放置到单独的一行中)。我的目标是使不同UserControl的每个列宽保持同步。除了一件事,使用SharedSizeGroup时一切正常。似乎任何宽度为*的列都无法正常运行。好像设置了*列宽,就好像它们是Auto一样。
SharedSizeGroup*大小是否有限制/问题?这似乎是使列宽保持同步的最佳方法,但我似乎无法解决此问题。

谢谢。

最佳答案

DefinitionBase.SharedSizeGroup Property (Microsoft Docs):



如果使用星号,则所有列的宽度都将相同,因此,如果您不介意自动调整尺寸,则应该为所有列分配相同的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>

关于wpf - 网格的SharedSizeGroup和*大小,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4664008/

10-11 05:41