我有一个带有 StackPanel 的窗口,而 StackPanel 有一个 ContentControl,它在运行时将一个 UserControl 绑定(bind)到它。
(在 MainWindow.xaml 中)
<StackPanel Margin="6,14,5,6" Grid.Row="1">
<ContentControl Name="WindowContent" Content="{Binding}" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" />
</StackPanel>
(在 MainWindow.xaml.cs 中)
WindowContent.Content = new MainWindowView();
我希望 UserControl(及其子项)填满 StackPanel 中的空间。
我检查了所有的高度和宽度都设置为自动,水平/垂直对齐设置为拉伸(stretch),水平/垂直内容对齐也设置为拉伸(stretch)。
有什么我想念的吗?
这似乎是一个愚蠢的问题,但我无法让它工作!
谢谢
最佳答案
StackPanel 容器的大小始终为其内容的最小大小。我相信您想使用 Grid 而不是 StackPanel;网格将尝试使用所有可用空间。
<Grid Margin="6,14,5,6" Grid.Row="1">
<ContentControl Name="WindowContent" Content="{Binding}" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" />
</Grid>
编辑:如果您想在 Grid 中使用相同类型的堆叠功能,只需执行以下操作:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
</Grid>
这将产生 2 个最小大小的行(如 StackPanel),然后是一个占用所有剩余可用空间的行。
关于WPF UserControl 在运行时绑定(bind)时未填充父容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6767613/