Grid SharedSizeGroup - 列正在弹跳,在无限循环中调整大小

kar*_*rel 8 wpf grid issharedsizescope sharedsizegroup

我需要有水平和垂直标题的表(简单的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>
Run Code Online (Sandbox Code Playgroud)

因此,两个头都包含一些具有一些ColumnDefinitions(resp.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);
    ...
Run Code Online (Sandbox Code Playgroud)

所以Header-Column应该与Content-Column共享它的宽度.但是当我运行程序时,列会在无限循环中弹跳和调整大小.Row的高度分享工作正常.哪里可能是问题?

标题中仅编辑列(grdHorizo​​ntalHeader)正在调整大小.grdContent中的列具有正确且稳定的宽度.

Dou*_*oug 3

网格控件的自动调整大小算法有时可能很挑剔。

您是否尝试过在每个列/行上设置 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>
Run Code Online (Sandbox Code Playgroud)

不是超级优雅,但为我们解决了同样的问题。