【问题标题】:.Net 4.5.1 GridSplitter only decreases columns.Net 4.5.1 GridSplitter 仅减少列
【发布时间】:2014-11-07 00:53:02
【问题描述】:

我什至无法理解这一点。我在.net 4.5.1 中有一个gridsplitter。我创建了一个新的 wpf 应用程序,然后将下面的代码放在主窗口上。 我对此的期望:在一个有两列的网格中,当我将拆分器向右拖动时,右侧的列应该减小,而左侧的列应该增加。当我将拆分器向左拖动时,左侧列的大小应减小,右侧的列大小应减小。 我看到的行为:当我将拆分器向右拖动时,右侧的列会减小,而左侧的列会减小。所以两个文本框的宽度变小了。当我将拆分器向左拖动时,拆分器停在网格的中心,没有其他任何事情发生。我没有最小宽度或宽度。有人知道这个吗?

<Grid>

    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" SharedSizeGroup="A" />
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="*" SharedSizeGroup="A" />
    </Grid.ColumnDefinitions>


    <TextBox Grid.Column="0" FontSize="55" HorizontalAlignment="Stretch"    VerticalAlignment="Stretch" TextWrapping="Wrap" Text="Hi" />
    <GridSplitter Grid.Column="1" Width="5" Background="Transparent" ResizeDirection="Columns" VerticalAlignment="Stretch" />

     <TextBox Grid.Column="2" FontSize="55" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" TextWrapping="Wrap" Text="there" />

</Grid>

【问题讨论】:

  • 你想要的确切行为是什么? GridSplitter 可以同时调整(缩小和增长)2 列。在您的代码中,它会调整当前列和第三列(下一列)的大小。然而,第一列的Width 与第三列的相同(都等于*)。当您将网格向左拖动直到当前列的宽度变为0 时,它当然会停在那里,并且左右列是整个网格宽度的50%
  • 我编辑了问题以更好地解释正在发生的事情。
  • 我已经添加了这个问题的答案。解决问题相当容易。

标签: wpf


【解决方案1】:

现在我明白你想要什么了。您正在遵循一种方法,您甚至可以为GridSplitter 保留一列(中间列)。要遵循这种方法,您需要将 ResizeBehavior 指定为 PreviousAndNext 以设置调整大小行为以调整上一列和下一列的大小,使当前(中间)列保持不变:

<GridSplitter Grid.Column="1" Width="5" Background="Transparent" 
              ResizeDirection="Columns" VerticalAlignment="Stretch" 
              ResizeBehavior="PreviousAndNext"/>

此外,当 GridSplitterWidth 足够小并且不会对包含列的 Width 造成太大影响时,您不需要为它指定单独的列。这意味着您只需要 2 列,将 GridSplitter 放在第一列或第二列并不重要。但请注意,将其放在第二列时,HorizontalAlignment 应为Left。当把它放在第一列时,HorizontalAlignment 应该是Right(这是默认值)。以下代码将GridSplitter 放在第二列中。我们将它放在所有 TextBox 之后,以确保它呈现在 TextBox 之上,否则您必须明确且适当地设置 Panel.ZIndex

<Grid.ColumnDefinitions>
    <ColumnDefinition Width="*" SharedSizeGroup="A" />
    <ColumnDefinition Width="*" SharedSizeGroup="A" />
</Grid.ColumnDefinitions>


<TextBox Grid.Column="0" FontSize="55" HorizontalAlignment="Stretch" 
         VerticalAlignment="Stretch" TextWrapping="Wrap" Text="Hi" />
<TextBox Grid.Column="1" FontSize="55" HorizontalAlignment="Stretch" 
         VerticalAlignment="Stretch" TextWrapping="Wrap" Text="there"/>
<GridSplitter Grid.Column="1" Width="5" Background="Transparent" 
              ResizeDirection="Columns" VerticalAlignment="Stretch" 
              HorizontalAlignment="Left"/>

【讨论】:

    猜你喜欢
    • 2016-05-29
    • 1970-01-01
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多