使用窗口的SizeToContent="WidthAndHeight"属性似乎破坏了网格的列和行定义的属性SharedSizeGroup。
<Window x:Class="SizeTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Title="MainWindow"
SizeToContent="WidthAndHeight">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" SharedSizeGroup="MainColumnWidth" />
<ColumnDefinition Width="*" SharedSizeGroup="MainColumnWidth" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" SharedSizeGroup="MainRowHeight" />
<RowDefinition Height="*" SharedSizeGroup="MainRowHeight" />
</Grid.RowDefinitions>
<Border BorderThickness="1" BorderBrush="Black" Grid.Column="0" Grid.Row="0" >
<Button Width="100" Height="100" Margin="10" Content="A" />
</Border>
<Border BorderThickness="1" BorderBrush="Black" Grid.Column="1" Grid.Row="0" >
<Button Width="100" Height="200" Margin="10" Content="B" />
</Border>
<Border BorderThickness="1" BorderBrush="Black" Grid.Column="0" Grid.Row="1" >
<Button Width="200" Height="100" Margin="10" Content="C" />
</Border>
<Border BorderThickness="1" BorderBrush="Black" Grid.Column="1" Grid.Row="1" >
<Button Width="100" Height="100" Margin="10" Content="D" />
</Border>
</Grid>
</Window>例如,上面的代码产生以下内容:

但是,我希望它能产生类似于

其中,它的大小为组件,但尊重共享的组大小。
调整大小会立即应用共享组大小,但随后您必须手动猜测正确的大小。
有办法解决这个问题吗?
如果有什么不同,我使用的是.NET 5。
编辑
最初将Grid.IsSharedSizeScope="True"添加到窗口或网格似乎解决了这个问题,但是当调整窗口大小时,网格将不再填充该窗口。

我怀疑,如果没有IsSharedSizeScope,由于列/行定义中的宽度/高度为*,但是当IsSharedSizeScope为真时,则共享大小范围生效,因此列/行只是相同的大小,但由于某种原因,当网格有增长空间时,停止调整网格大小。
发布于 2021-01-09 16:46:45
看来你需要使用UniformGrid
<UniformGrid Rows="2" Columns="2">
<Border BorderThickness="1" BorderBrush="Black">
<Button Width="100" Height="100" Margin="10" Content="A" />
</Border>
<Border BorderThickness="1" BorderBrush="Black">
<Button Width="100" Height="200" Margin="10" Content="B" />
</Border>
<Border BorderThickness="1" BorderBrush="Black">
<Button Width="200" Height="100" Margin="10" Content="C" />
</Border>
<Border BorderThickness="1" BorderBrush="Black">
<Button Width="100" Height="100" Margin="10" Content="D" />
</Border>
</UniformGrid>发布于 2021-01-11 11:55:52
使用窗口的
SizeToContent="WidthAndHeight"属性似乎破坏了网格的列和行定义的属性SharedSizeGroup。
不,为了利用共享大小组,您必须为共享大小组设置一个应用范围。这就是您对附加的IsSharedSizeScope属性所做的操作,默认情况下它是false,这意味着最初在任何元素上都没有定义范围的,因此共享大小组将不应用。
<Grid IsSharedSizeScope="True">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" SharedSizeGroup="MainColumnWidth" />
<ColumnDefinition Width="*" SharedSizeGroup="MainColumnWidth" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" SharedSizeGroup="MainRowHeight" />
<RowDefinition Height="*" SharedSizeGroup="MainRowHeight" />
</Grid.RowDefinitions>
<!-- ...other grid definitions. -->
</Grid>例如,上面的代码生成以下内容:调整大小会立即应用共享组大小,但随后您必须手动猜测正确的大小。
这与共享大小组无关,而是与Grid本身相关。您可以删除所有共享大小定义,它将产生相同的结果。实际上,共享大小定义是多余的,因为为每个列和单元提供一个*大小,它们将按相同比例缩放。见供参考的文件。
星号大小用于按加权比例分配可用空间。
不幸的是,我不知道为什么信息大小完全适合Grid内容,而不是尊重明星大小。但是,如果适用的话,应用MinWidth和MinHeight可以解决这个问题。
<Grid IsSharedSizeScope="True">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" MinWidth="200" />
<ColumnDefinition Width="*" MinWidth="200" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" MinHeight="200" />
<RowDefinition Height="*" MinHeight="200" />
</Grid.RowDefinitions>
<!-- ...other grid definitions. -->
</Grid>这可能是同样的问题,也可能是一个类似的问题,明星大小,如在这个相关问题。
..。当IsSharedSizeScope为真时,共享大小范围就会生效,但是由于某种原因,当网格有增长的空间时,就停止调整网格大小。
这是预期的,因为设置共享大小组将以不同的方式对待大小。。
参加大小共享的列和行不尊重星号大小。在大小共享场景中,
Auto.将星号调整为星号。
因此,如果应用*,Grid将被测量,即使在调整大小之后,大小也将保持不变。
正如您的问题所暗示的,您正在处理网格中的统一单元格。在这种情况下,您可以通过使用专门用于此场景的UniformGrid控件来解决这些问题。
提供一种在网格中排列内容的方法,网格中的所有单元格都具有相同的大小。
<UniformGrid>
<Border BorderBrush="Black" BorderThickness="1">
<Button Width="100" Height="100" Margin="10" Content="A" />
</Border>
<Border BorderBrush="Black" BorderThickness="1">
<Button Width="100" Height="200" Margin="10" Content="B" />
</Border>
<Border BorderBrush="Black" BorderThickness="1">
<Button Width="200" Height="100" Margin="10" Content="C" />
</Border>
<Border BorderBrush="Black" BorderThickness="1">
<Button Width="100" Height="100" Margin="10" Content="D" />
</Border>
</UniformGrid>https://stackoverflow.com/questions/65643487
复制相似问题