Grid 的 SharedSizeGroup 和 * 大小调整 [英] Grid's SharedSizeGroup and * sizing

查看:22
本文介绍了Grid 的 SharedSizeGroup 和 * 大小调整的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个用户控件,称为 UserControl,它有一个带有以下列定义的网格:

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

<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,它包含一个网格本身,并在网格上定义了以下属性:

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

Grid.IsSharedSizeScope="True"

现在,我在 MainWindow 的网格中添加了几个 UserControl(每个都在单独的行中).我的目标是让不同用户控件的每个列宽保持同步.使用 SharedSizeGroup 时一切正常,除了一件事.似乎任何宽度为 * 的列的行为都不尽如人意.看起来 * 列宽设置为好像它们是 Auto 而不是.

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 SharedSizeGroup except 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 Auto instead.

SharedSizeGroup* 大小调整是否有任何限制/问题?这似乎是保持列宽同步的最佳方法,但我似乎无法解决此问题.

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

谢谢.

推荐答案

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

如果您使用星号,则所有列的宽度都相同,因此如果您不介意自动调整大小方面,则应为所有列分配相同的 SharedSizeGroup:

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

<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>

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

(From this behavior it also follows that you can drop the Width property when SharedSizeGroup is set)

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

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.

一个简单的例子:

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

正如所解释的, Width="*" 不会做任何事情,但是由于列 02 是同步的,所以列 1 也必须同步,因此您只需删除 SharedSizeGroup:

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

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

这篇关于Grid 的 SharedSizeGroup 和 * 大小调整的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆