代码之家  ›  专栏  ›  技术社区  ›  Shaun Bowe

WPF网格SharedSizeGroup错误

  •  3
  • Shaun Bowe  · 技术社区  · 15 年前

    如果运行此代码并单击选项卡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。

    1 回复  |  直到 15 年前
        1
  •  3
  •   repka    15 年前

    设置附加属性 Grid.IsSharedSizeScope 在父元素上为true( TabControl )应停止层次结构上的大小共享传播。像这样:

    <TabControl Grid.IsSharedSizeScope="True">
    

    选项卡控件 尺寸将对齐。

    推荐文章