【问题标题】:Resize window parts in runtime在运行时调整窗口部件的大小
【发布时间】:2012-03-12 12:39:29
【问题描述】:

我想将主窗口分成三个部分,就像图片上的那个一样。应该有一条线(红色的)或矩形编号 2 的左边框,当用鼠标拖动它时,它会调整矩形 1 和 2 的大小。这就像 windows 媒体播放器中播放列表的行为。关于如何获得这个的任何想法?另外,如果有人提出一个解决方案来解决这个播放列表在向右拖动红线时如何折叠,那就太好了。

【问题讨论】:

  • CodeProject 上有一些东西向 WPF DockPanel 添加了分隔符。
  • 它的通用名称是分离器。

标签: wpf resize window


【解决方案1】:

使用如下所示的列和行定义 <Grid>

<Grid>
    <Grid.RowDefinitions>
    <RowDefinition Height="300"/>
    <RowDefinition Height="*"/>
    </Grid.RowDefinitions>

    <Grid.ColumnDefinitions>
    <ColumnDefinition Width="600"/>
    <ColumnDefinition Width="20"/>
    <ColumnDefinition Width="300"/>
    </Grid.ColumnDefinitions>
    ...

然后是gridsplitter(仍在网格内):

    <GridSplitter Grid.Row="0" Grid.Column="1" ResizeDirection="Columns" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>

请注意,gridsplitter 将需要它自己的列。

【讨论】:

  • 好的,很好,但我不知道如何将我已经拥有的内容放入由列/行定义创建的这些单元格中?如何将我的列表框放在第三列和第一行?
  • 当您在 Grid 中放置一个类似 ListBox 的控件时,该列表框将获得一个名为 Attached Properties 的东西。在本例中为 Grid.Row 和 Grid.Column,您可以使用它们将内容放置在正确的行和列中。它是从零开始的。
  • @ahdaniels,很好,正在工作,非常感谢。有没有办法锁定第三个矩形所以它不会调整大小?我确保跨度只有 1 列和 1 行,但它仍然调整底部矩形的大小。
  • 将 Grid.ColumnSpan="3" 设置为放置在矩形中的控件
【解决方案2】:

这是一个GridSplitter,这是一个如何使用:

<GridSplitter Grid.Row="1" 
              Height="5" 
              Width="Auto" 
              HorizontalAlignment="Stretch" 
              VerticalAlignment="Stretch" 
              Background="Gray" 
              ResizeDirection="Rows" />

您需要从您的Grid 为其分配RowColumn,并指定其ResizeDirection。这个是水平的,但你可以理解为垂直的。

HTH,

巴布。

【讨论】:

  • 好的,我有这些定义,它调整了 1 和 2 的大小,还有第 3 个矩形。有什么办法可以锁定第三个矩形的宽度?
  • 请显示您正在使用的 XAML。您可能必须将第三列的宽度设置为 Auto 或固定大小。
  • 谢谢@ahdaniels,你让我了解了这项技术。我设置了列和行的跨度、位置和水平/垂直对齐,它就像我希望的那样工作。
猜你喜欢
  • 2011-05-18
  • 1970-01-01
  • 2018-03-01
  • 1970-01-01
  • 2015-05-08
  • 2016-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多