我需要用stackpanel(框架)中的最后一个元素填充空白空间:
<DockPanel>
<StackPanel Orientation="Vertical">
<Frame NavigationUIVisibility="Hidden" Height="100" x:Name="_menu" />
<Frame NavigationUIVisibility="Hidden" x:Name="_mainFrame" />
</StackPanel>
</DockPanel>
_mainFrame-从_menu框架到底部填充空白空间
最佳答案
StackPanel
不是用于允许元素“填充剩余空间”的布局容器。 StackPanel
在其他布局容器中有特定的用途。它是垂直/水平地“堆叠”物品,并根据 child 的期望高度(比可用物品高)进行工作。这将使 children 得到他们想要的空间。
根据您的要求,您可以使用DockPanel
/Grid
。这两个控件都将允许父容器根据可用容器“限制”其子容器的尺寸。
在您的示例中,您已经有一个DockPanel
。但是,您将StackPanel
作为它的 child ,这是唯一没有太大意义的 child 。当要放入一个布局中的子项目超过1个时,您要尝试使用布局容器。在这种情况下,StackPanel是DockPanel
的唯一子级。
为了使用DockPanel
满足您的要求,您可以使用,
<DockPanel>
<Frame NavigationUIVisibility="Hidden" Height="100" x:Name="_menu" DockPanel.Dock="Top" />
<Frame NavigationUIVisibility="Hidden" x:Name="_mainFrame" />
</DockPanel>
默认情况下,
DockPanel
使用LastChildFill="True"
,因此声明中的第二项将被拉伸(stretch)以填充您需要的剩余可用空间。如果将此属性设置为false,则不会扩展它。用
Grid
做同样的事情:<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Frame NavigationUIVisibility="Hidden" Height="100" x:Name="_menu" />
<Frame NavigationUIVisibility="Hidden" x:Name="_mainFrame" Grid.Row="1" />
</Grid>
根据您的需求,我更喜欢
DockPanel
,Grid
方法是一个很好的了解并且可能在情况需要时使用的方法。关于WPF StackPanel垂直框架全高,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18568567/