我需要包含水平和垂直标题的表(简单的PivotGrid)。我在这里发现了一些类似(或几乎相同)的问题,但没有人给出解决方案。在XAML中,我定义了这个结构:
<Grid x:Name="grdMain" Background="White" Grid.IsSharedSizeScope="True">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid Grid.Row="0" Grid.Column="1" x:Name="grdHorizontalHeader">
<!-- place for column definitions and header labels defined in code -->
</Grid>
<Grid Grid.Row="1" Grid.Column="0" x:Name="grdVerticalHeader">
<!-- place for column definitions and header labels defined in code -->
</Grid>
<Grid Grid.Row="1" Grid.Column="1" x:Name="grdContent">
<!-- place for column definitions and header labels defined in code -->
</Grid>
</Grid>
因此,两个标头都包含一些具有一些ColumnDefinitions(分别为RowDefinitions)的网格,我需要根据Content-ColumnDefinitions调整Header-ColumnDefinitions的大小。我在代码中这样做:
foreach (var row in myColumnSource)
{
// Content columns definitions
var cD = new ColumnDefinition();
cD.Width = GridLength.Auto;
cD.SharedSizeGroup = "ColumnSharedSizeGroup" + row.Value;
this.grdContent.ColumnDefinitions.Add(cD);
// Header columns definitions
var cD2 = new ColumnDefinition();
cD2.Width = GridLength.Auto;
cD2.SharedSizeGroup = "ColumnSharedSizeGroup" + row.Value;
this.grdHorizontalHeader.ColumnDefinitions.Add(cD2);
...
所以Header-Column应该与Content-Column共享它的宽度。但是当我运行程序时,列会在无限循环中弹跳和调整大小。 Row的高度分享工作正常。哪个可能是问题?
仅编辑标题(grdHorizontalHeader)中的列正在调整大小。 grdContent中的列具有正确且稳定的宽度。
答案 0 :(得分:2)
网格控件的自动调整算法有时会很挑剔。
您是否尝试在每个列/行上设置MinWidth?
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" MinWidth="30" />
<ColumnDefinition Width="Auto" MinWidth="30" />
<ColumnDefinition Width="Auto" MinWidth="30" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" MinHeight="15" />
<RowDefinition Height="Auto" MinHeight="15" />
<RowDefinition Height="Auto" MinHeight="15" />
</Grid.RowDefinitions>
不是超级优雅,但为我们解决了同样的问题。
答案 1 :(得分:2)
如果一个网格有许多SharedSizeGroup列,则生成的布局会执行指数级增加的传递次数以尝试对其进行排序。某个地方有人说微软承认了这个错误,但我无法找到它的细节。
为了解决这个问题,我在StackPanel内部将网格分成了较小的网格。这使得布局再次快速并保留了共享大小。
由于你的网格是二维的,这将更难。当你动态添加控件时,也许你可以让一个垂直StackPanel保持水平StackPanels保持较小的网格?