【问题标题】:Gridsplitter ignores minwidth of columnsGridsplitter 忽略列的最小宽度
【发布时间】:2011-04-06 07:14:16
【问题描述】:

我想要一个简单的 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 列始终可见,宽度至少为 80 像素?

感谢您的帮助

【问题讨论】:

    标签: wpf grid gridsplitter


    【解决方案1】:

    无法将此作为 cmets 发布;所以把它放在答案列表中。
    如果我将GridGridSplitter 作为主GridGridSplitter 右侧的内容,我可以将最右侧的窗格推出窗口边界。有什么想法吗?

    <Grid>
        <Grid.ColumnDefinitions>
            <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" />
        <Grid Grid.Column="2">
            <Grid.ColumnDefinitions>
                <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}}" />
        </Grid>
    </Grid>
    

    【讨论】:

      【解决方案2】:

      尝试对 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>
      

      【讨论】:

      • 当第 5 列或第 3 列被调整大小超过其最小宽度时,这会产生额外的空间。 . .
      • 我也刚刚发现拉伸对齐也是必需的。
      猜你喜欢
      • 1970-01-01
      • 2016-07-28
      • 2015-06-08
      • 1970-01-01
      • 2016-10-11
      • 2017-07-10
      • 1970-01-01
      • 1970-01-01
      • 2018-09-24
      相关资源
      最近更新 更多