none
Grid的shared size groups的问题 RRS feed

  • 问题

  • 有三个Grid,每一个Grid的第一列共享尺寸,如下:

     <StackPanel Orientation="Vertical"  Grid.IsSharedSizeScope="True">
    
            <!-- 第1个Grid -->
            <Grid  ShowGridLines="True"  Margin="25" >
                <Grid.RowDefinitions>
                    <RowDefinition   />
                    <RowDefinition    />
                    <RowDefinition   />
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto"  SharedSizeGroup="A"/>
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>
                <GridSplitter Grid.Row="0" Grid.Column="1" Width="5"   HorizontalAlignment="Center" VerticalAlignment="Stretch" Grid.RowSpan="3" />
                <TextBlock Text="  A1  " Grid.Row="0"   />
                <TextBlock Text="  A2  " Grid.Row="1"   />
                <TextBlock Text="  A3  " Grid.Row="2"    />
            </Grid>
    
    
            <!-- 第2个Grid -->
            <Grid  ShowGridLines="True"  Margin="25,0,25,25">
                <Grid.RowDefinitions>
                    <RowDefinition  />
                    <RowDefinition    />
                    <RowDefinition   />
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto" SharedSizeGroup="A"/>
                    <ColumnDefinition Width="Auto"  />
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>
                <GridSplitter Grid.Row="0" Grid.Column="1" Width="5"  HorizontalAlignment="Center" VerticalAlignment="Stretch" Grid.RowSpan="3" />
                <TextBlock Text="  B1  " Grid.Row="0"  />
                <TextBlock Text="  B2  " Grid.Row="1"    />
                <TextBlock Text="  B3  " Grid.Row="2"    />
            </Grid>
    
            <!-- 第3个Grid -->
            <Grid   ShowGridLines="True"  Margin="25,0,25,25" >
                <Grid.RowDefinitions>
                    <RowDefinition   />
                    <RowDefinition    />
                    <RowDefinition    />
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto"  SharedSizeGroup="A"/>
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>
                <GridSplitter Grid.Row="0" Grid.Column="1" Width="5" HorizontalAlignment="Center" VerticalAlignment="Stretch" Grid.RowSpan="3" />
                <TextBlock Text="  C1   " Grid.Row="0"   />
                <TextBlock Text="  C2   " Grid.Row="1"   />
                <TextBlock Text="  C3   " Grid.Row="2"    />
            </Grid>
            
        </StackPanel>

    运行效果:

    问题:如果只在某一个Grid拖动GridSplitter以改变列的宽度,则一切正常;但如果在一个Grid拖动GridSplitter后,再到另外一个Grid拖动GridSplitter,比如先在A1旁边左右拖动GridSplitter,然后再到C1旁边拖动GridSplitter,就不正常了:可以往右拖,但往左拖时,就要么拖不动,要么拖一点就卡顿住了(每次能拖动的距离都不一样),再回到A1旁边拖也不正常了。

    请问这是什么原因?


    • 已编辑 seewold 2014年10月20日 15:57
    2014年10月20日 15:52

答案

  • 我的环境是 64bit win7 旗舰版 + sp1 + .NET 4.0 。是可以缩小,有时是A可动,有时是B,有时是C,毫无规律。

    我的目的是可由任意Grid自由地同时改变其他Grid共享列的大小,看来要另想办法了。

    2014年10月22日 5:10

全部回复

  • 楼主 你好,

    我这边建了一个WPF的项目还原了这个问题。如果先拖动A1列,调整好宽度后,再拖动B1/C1调整时,只能向右边拖动。我这边测试下来是无法往左边拖动的。测试环境:Win8.1 Pro 64bit + .NET 4.5. 查询了Grid.IsSharedSizeScope 附加属性 和 DefinitionBase.SharedSizeGroup 属性。并没有发现有这方面的特性。我的理解是这样的,当第一次修改后,不管是A1/B1/C1,他们的最小宽度只有第一次修改的它们的元素才能修改。其他两个元素可以将宽度放大,但是没办法缩小。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年10月22日 2:49
    版主
  • 我的环境是 64bit win7 旗舰版 + sp1 + .NET 4.0 。是可以缩小,有时是A可动,有时是B,有时是C,毫无规律。

    我的目的是可由任意Grid自由地同时改变其他Grid共享列的大小,看来要另想办法了。

    2014年10月22日 5:10