Gridsplitter忽略列的最小宽度

时间:2010-08-31 14:00:30

标签: wpf grid gridsplitter

我希望有一个简单的3列网格,可调整列,MinWidth为80。

代码如下所示:

<Grid>
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="120" MinWidth="80"/>
    <ColumnDefinition Width="Auto"/>
    <ColumnDefinition Width="*" MinWidth="80"/>
    <ColumnDefinition Width="Auto"/>
    <ColumnDefinition Width="120" MinWidth="80"/>
  </Grid.ColumnDefinitions>
  <GridSplitter Grid.Column="1" Width="5" HorizontalAlignment="Center" />
  <GridSplitter Grid.Column="3" Width="5" HorizontalAlignment="Center" />
</Grid>

但它并不像我想要的那样有效。当分离器被推到左侧时,一切正常。当第二个分离器向右推时,一切正常。但是如果第一个分离器被推到右侧,它会将第3列和第二个分离器推出网格(或使其宽度= 0)。

我使用了单独的列作为网格分割器,就像它在msdn示例中所做的那样:

<Grid.ColumnDefinitions>
  <ColumnDefinition/>
  <ColumnDefinition Width="Auto" />
  <ColumnDefinition/>
</Grid.ColumnDefinitions>
...
<GridSplitter Grid.Column="1"
      HorizontalAlignment="Center"
      VerticalAlignment="Stretch"
      Background="Black" 
      ShowsPreview="True"
      Width="5"
      />

我也将对齐设置为居中,因为我在某处读取了右对齐可能是个问题 并尝试了不同的ResizeBehaviors。

有谁知道,如何解决这个问题,以便始终可以看到3列宽度至少为80px?

感谢您的帮助

2 个答案:

答案 0 :(得分:19)

请尝试将此行设置为将minwidth设置为80的三列。使用*而不是在使用gridsplitters时指定精确的宽度。

<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Hidden">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" MinWidth="80" />
            <ColumnDefinition Width="5"/>
            <ColumnDefinition Width="*" MinWidth="80"/>
            <ColumnDefinition Width="5"/>
            <ColumnDefinition Width="*" MinWidth="80"/>
        </Grid.ColumnDefinitions>
        <TextBlock Grid.Column="0" Text="{Binding Path=ActualWidth, RelativeSource={RelativeSource Self}}" />
        <GridSplitter Grid.Column="1"  VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Background="Red" />
        <TextBlock Grid.Column="2" Text="{Binding Path=ActualWidth, RelativeSource={RelativeSource Self}}" />
        <GridSplitter Grid.Column="3"   VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Background="Red" />
        <TextBlock Grid.Column="4" Text="{Binding Path=ActualWidth, RelativeSource={RelativeSource Self}}" />
    </Grid>
</ScrollViewer>

答案 1 :(得分:0)

无法将其发布为评论;因此,将其放在“答案”列表中。
如果将带有Grid的{​​{1}}放在带有GridSplitter的主Grid右侧的内容,则可以将最右边的窗格超出范围窗户的有想法吗?

GridSplitter