2009-09-22 83 views
0

假设我在窗口中有两个元素。
我想要元素A来填充所有未使用的顶点空间,并且总是至少例如。 200px高度。
元素B将有几个固定大小(扩展器),应该给它所需的空间(但为A留下至少200px)。如果窗口中没有足够的可用空间,B应该可以滚动。WPF布局谜题

这与我想要达到的要接近,但DockPanel不尊重MinHeight属性。

<DockPanel> 
    <ScrollViewer DockPanel.Dock="Bottom"> 
    <B/> 
    </ScrollViewer> 
    <A MinHeight="200"/> 
</DockPanel> 

有什么办法可以使用WPF本地面板来做到这一点?

回答

2

DockPanel将始终按照其定义的顺序处理面板;它不会因为最后一个元素具有MinHeight而使对接元素变小。

我会用一个网格:

<Grid> 
    <Grid.RowDefinitions> 
    <RowDefinition Height="*" MinHeight="200" /> 
    <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 
    <A Grid.Row="0"/> 
    <ScrollViewer Grid.Row="1"> 
    <B/> 
    </ScrollViewer> 
</Grid> 
+0

这是行不通的。它不符合原始要求“如果窗口中没有足够的可用空间,B应该可滚动”。当您将“高度”设置为“自动”时,网格会提供您请求的任何尺寸。所以ScrollViewer将永远不会有滚动条,直到你硬编码它的高度。 – Anvaka 2009-09-22 20:13:53

+0

正如Anvaka所说,这是行不通的。 – 2009-09-22 20:35:41

+0

你是对的,第二行将在包含窗口的下方。 似乎没有办法说“汽车,但只有当有足够的空间” 我想你会需要代码来做到这一点(自定义布局面板,或附加到一些事件处理程序和显式设置大小) – Daniel 2009-09-22 21:20:11