gpt4 book ai didi

wpf - Grid 的 SharedSizeGroup 和 * 大小调整

转载 作者:行者123 更新时间:2023-12-03 07:34:08 26 4
gpt4 key购买 nike

我有一个用户控件,称之为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 中的网格添加了几个 UserControl(每个控件到一个单独的行)。我的目标是让不同用户控件的每个列宽度保持同步。使用 SharedSizeGroup 时一切正常,除了一件事之外。似乎任何宽度为 * 的列都不会按其应有的方式运行。看起来 * 列宽度被设置为 Auto

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

谢谢。

最佳答案

DefinitionBase.SharedSizeGroup Property (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:

<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 属性)

<小时/>

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

一个简单的例子:

<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 - Grid 的 SharedSizeGroup 和 * 大小调整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4664008/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com