WPF UserControl 在运行时绑定(bind)时未填充父容器

标签 wpf

我有一个带有 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/

相关文章:

c# - 通过 ListView 中的 DataContext 从行对象获取值

c# - 如何检查 XAML 元素是否支持 AutomationId 属性

c# - 从按钮打开窗口而不创建新的 windowFoo 实例

c# - WPF INotifyPropertyChanged 不更新数组属性?

c# - 在 WPF 中的两个窗口之间共享同一对象

C# WPF 内容切换

c# - 重新评估 UniformGrid 行和列 WPF

wpf - DataGrid - 使用 MVVM 绑定(bind)到列表列表

c# - 在ViewModel(MVVM)内部使用 View 方法

c# - 通过 MVVM Light RelayCommand 绑定(bind)泛型类型