WPF GridSplitter分割/调整两个ListBox的大小?

时间:2009-09-14 22:32:04

标签: wpf listbox scroll gridsplitter

我有一个有7行的网格。 第0行是一组2个按钮 第1行是对象的ListBox 第2行是一组3个按钮 第3行是一组2个按钮 第4行是我的GridSplitter所在的地方 第5行是一组2个按钮 第6行是对象的ListBox

我想让GridSplitter上下滑动,调整两个ListBox中的每一个的大小。我现在已经把它放在自己的行中了,当我滑动它时,当它到达第4行(它自己的行)的顶部时它会冻结,并且只是在它向下扩展第4行时创建空白区域。

我只需要拆分器上下滑动并调整每个ListBox的大小。目前,如果列表框的视图太大,那么它们会有垂直滚动条。

任何想法?

2 个答案:

答案 0 :(得分:6)

以下是一些XAML,其中显示了如您所述的使用GridSplitter

<Grid VerticalAlignment="Stretch">  
  <Grid.RowDefinitions>
    <RowDefinition Height="10" />
    <RowDefinition Height="10" />
    <RowDefinition Height="10" />
    <RowDefinition Height="10" />
    <RowDefinition Height="10" />
    <RowDefinition Height="10" />
    <RowDefinition Height="*" />
    <RowDefinition Height="*" />
  </Grid.RowDefinitions>

  <Rectangle Grid.Row="0" Fill="Red" />
  <Rectangle Grid.Row="1" Fill="Orange" />
  <Rectangle Grid.Row="2" Fill="Yellow" />
  <Rectangle Grid.Row="3" Fill="Green" />
  <Rectangle Grid.Row="4" Fill="Blue" />
  <Rectangle Grid.Row="5" Fill="LightBlue" />

  <ListBox Grid.Row="6" Background="Indigo">
    <ListBoxItem>Hello</ListBoxItem>
    <ListBoxItem>World</ListBoxItem>
  </ListBox>

  <GridSplitter Grid.Row="7" Height="5" Background="Gray"
                VerticalAlignment="Top" HorizontalAlignment="Stretch" />

  <ListBox Grid.Row="7" Background="Violet" Margin="0,5,0,0">
    <ListBoxItem>Hello</ListBoxItem>
    <ListBoxItem>World</ListBoxItem>
  </ListBox>
</Grid>

避免将GridSplitter放入其自己的行中。将其放在现有行中,并将其对齐设置为顶部(或底部,如果在上部单元格中),水平拉伸。注意我是如何将它的高度设置为5,然后给第二个ListBox的上边距为5,这样两个元素都不会隐藏另一个元素的任何部分。

希望有所帮助。

答案 1 :(得分:0)

我遇到了同样的麻烦:一个水平的GridSplitter(在它自己的行中)无法移动,虽然我的垂直一个工作得很好。我发现添加Horizo​​ntalAlignment =“Stretch”属性修复了我的困难。

非工作XAML:

<GridSplitter Grid.Row="2" Grid.Column="2" Height="5" ResizeDirection="Rows" VerticalAlignment="Center" />

工作XAML:

    <GridSplitter Grid.Row="2" Grid.Column="2" Height="5" ResizeDirection="Rows" VerticalAlignment="Center" HorizontalAlignment="Stretch"/>

我还发现,如果我运行项目,关闭项目应用程序,然后将光标放在XAML行上,使用非工作的GridSplitter(即更改前),GridSplitter的选择窗口将显示GridSplitter at专栏的结尾。您还可以通过将BackGround属性更改为颜色(例如“红色”)来证明这一点。

此处提到设置Horizo​​ntalAlignment属性(但不强调): http://msdn.microsoft.com/en-us/library/ms743457.aspx