.net WPF网格共享SizeGroup错误

.net WPF网格共享SizeGroup错误,.net,wpf,xaml,.net,Wpf,Xaml,如果您运行此代码并单击选项卡2,然后再单击选项卡1,则应用程序会变得疯狂,并开始来回反弹列宽。有没有关于如何解决这个问题的建议 <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width=

如果您运行此代码并单击选项卡2,然后再单击选项卡1,则应用程序会变得疯狂,并开始来回反弹列宽。有没有关于如何解决这个问题的建议

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow"
    Height="350"
    Width="525">
<Grid IsSharedSizeScope="True">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="Auto"
                          SharedSizeGroup="Col3" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>

    <TextBlock Text="Label 1"
               Grid.Row="0"
               Grid.Column="0" />

    <TextBox Grid.Column="1"
             Grid.Row="0"
             Text="TextBox 1" />

    <TextBlock Text="Label 2"
               Grid.Row="0"
               Grid.Column="2" />

    <TextBox Grid.Column="3"
             Grid.Row="0"
             Text="TextBox 2" />

    <DockPanel Grid.Row="1"
               Grid.Column="2"
               Grid.ColumnSpan="2">

        <TabControl>
            <TabItem Header="Tab 1">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition SharedSizeGroup="Col3" />
                        <ColumnDefinition Width="Auto" />
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="Auto" />
                    </Grid.RowDefinitions>
                    <TextBlock Text="Tab 1: Short Text.."
                               Grid.Row="0"
                               Grid.Column="0" />

                </Grid>
            </TabItem>
            <TabItem Header="Tab 2">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition SharedSizeGroup="Col3" />
                        <ColumnDefinition Width="Auto" />
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="Auto" />
                    </Grid.RowDefinitions>
                    <TextBlock Text="Tab 2: Short Text.."
                               Grid.Row="0"
                               Grid.Column="0" />
                    <TextBlock Text="Tab 2: Long Text..................................... "
                               Grid.Row="1"
                               Grid.Column="0" />
                </Grid>
            </TabItem>
        </TabControl>
    </DockPanel>
    </Grid>
</Window>


这是从一个类似的应用程序中剥离出来的,并且大大简化了。问题的根源是SharedSizeGroup“Col3”。在实际应用程序中,还有其他项目共享该列,因此我无法删除SharedSizeGroup,除非有其他方法来实现所需的行为。

将附加属性
网格设置为True。父元素(
TabControl
)上的IsSharedSizeScope
应停止层次结构上方的大小共享传播。像这样:

<TabControl Grid.IsSharedSizeScope="True">


TabControl
中,尺寸将对齐。

谢谢您的回答,但这并不能解决我的问题。这很好,但我需要共享大小范围在TabControl之外。在我的示例中,我需要它与TabControl之外的网格中的标签共享。哦。。。根据您之前的描述,我认为您既不能控制TabControl的内容,也不能控制承载它的shell,并且希望两件事不会相互影响。现在你说你真的想在列和其中的控件之间共享大小,我很困惑。从您的代码中,我看到DockPanel被放置在父网格的第二列中,该列与TabControl中的子网格大小相同。如果您使用的是Grid或DockPanel等面板,占用了TabItem中的所有可用空间,那么您希望这种大小共享如何工作?……换句话说,您希望列的大小与其内部的列相同,甚至更多(即TabControl/TabItems周围的其他列和边框)。没有办法解方程X=X+某个正值。请详细说明你正在努力实现的目标。如果您将TabItems的子网格放置到类似StackPanel(方向=水平)的位置,这是可行的,但对我来说仍然没有意义。将DockPanel更改为StackPanel解决了问题。现在我想这完全有道理。谢谢。