wpf Grid 的 SharedSizeGroup 和 * sizing

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/4664008/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-08 22:29:46  来源:igfitidea点击:

Grid's SharedSizeGroup and * sizing

wpfxamllayoutwpf-controlsgrid

提问by Flack

I have a user control, call it UserControl, that has a grid with the following column definitions:

我有一个用户控件,称之为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>

I also have MainWindow, which contains a grid itself, with the following property defined on the grid:

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

Grid.IsSharedSizeScope="True"

Now, I added a couple of UserControls to the grid in MainWindow(each to a separate row). My goal is to have each of the column widths of the different UserControls to remain in sync. Everything works fine when using SharedSizeGroupexcept for one thing. It seems that any column with a Width of *does not behave as it should. It looks like the *column widths are set as if they were Autoinstead.

现在,我将几个 UserControl 添加到网格中MainWindow(每个添加到单独的行)。我的目标是让不同用户控件的每个列宽保持同步。使用时一切正常,SharedSizeGroup除了一件事。似乎任何宽度为 的列的*行为都不像它应该的那样。看起来*列宽被设置为好像它们是Auto相反的。

Are there any limitations/issues with SharedSizeGroupand *sizing? This seems like the best way to keep the column widths in sync but I can't seem to fix this.

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

Thanks.

谢谢。

回答by H.B.

DefinitionBase.SharedSizeGroup Property (Microsoft Docs):

DefinitionBase.SharedSizeGroup 属性 (Microsoft Docs)

Columns and rows that participate in size-sharing do not respect Star sizing. In the size-sharing scenario, Star sizing is treated as Auto

参与大小共享的列和行不遵循 Star 大小。在大小共享场景中,Star sizing 被视为 Auto

If you use star then all columns would be the same width, so you should assign the same SharedSizeGroupto all if you do not mind the auto-sizing aspect:

如果您使用星号,那么所有列的宽度将相同,因此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>

(From this behavior it also follows that you can drop the Widthproperty when SharedSizeGroupis set)

(从这种行为也可以看出,您可以WidthSharedSizeGroup设置时删除该属性)



You can deduce that if all auto-sizing columns are in shared size groups then all star-sizing columns will have the same sizes as every grid in scope will have the same amount of unused space left that will be distributed to the star-sized columns.

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

A simple example:

一个简单的例子:

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

As explained the Width="*"will not do anything, but as columns 0and 2are synched, column 1has to be synched as well so you can just drop the SharedSizeGroup:

正如解释的那样Width="*"不会做任何事情,但是当列02同步时,列1也必须同步,所以你可以删除SharedSizeGroup

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