2009-09-14 65 views
3

我有一个有7行的网格。 行0是一组的2个按钮 第1行是一个对象的列表框 第2行是一组的3个按钮 第3行是一组的2个按钮 第4行是我的GridSplitter住 第5行是一组2按钮 第6行是对象的列表框WPF GridSplitter分裂/调整两个ListBox的?

我希望GridSplitter上下滑动,调整每个ListBox的大小。我现在生活在它自己的行里,当我滑动它时,它会在它到达第4行(它自己的行)的顶部时冻结,并简单地在向下扩展第4行时创建空白区域。

我只需要该分离器上下滑动并调整每个ListBox的大小。目前,如果这些ListBox的视图太大,它们会有垂直滚动条。

有什么想法?

回答

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的上边距,以便两个元素都不隐藏另一个元素的任何部分。

希望有所帮助。

+0

我试图与我的代码,它似乎并没有工作。网格分离器只是闲置,不会向上或向下移动。我有3行高度设置为自动:一行包含元素的堆栈面板,一行包含网格,另一行包含另一个堆栈元素。任何想法,为什么它不会滚动? – Shafique 2009-09-16 16:17:10

+0

嗨Shafique。那么你的GridSplitter的实现方式肯定会有所不同。尝试复制上面的所有XAML并粘贴为Kaxaml中Page元素的子元素。你会看到GridSplitter按预期工作。从那里,您可以迁移XAML以更加紧密地匹配您拥有的内容并找到确切的问题。 http://www.kaxaml.com – 2009-09-17 12:50:51

+0

我在那里看到了一些他们有VerticalAlighment =“中心”的愚蠢示例。这是行不通的。我不确定它什么时候会,但它不适合我。使它顶部固定它。我仍然不确定它是如何工作的。我非常喜欢SplitterPanel的简洁,但是哦... – 2009-12-11 04:23:47

0

我遇到了同样的问题:水平的GridSplitter(在它自己的行中)无法移动,尽管我的垂直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。您还可以通过将BackGround属性更改为某种颜色(例如“红色”)来演示此功能。

设置Horizo​​ntalAlignment属性就是这里所说的(但不强调): http://msdn.microsoft.com/en-us/library/ms743457.aspx