我有一个具有StackPanel的窗口,StackPanel有一个ContentControl,它在运行时获取绑定到它的UserControl。
(在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中的空间。
我已检查所有高度和宽度都设置为“自动”,“水平/垂直对齐”设置为“拉伸”,“水平/垂直对齐”也设置为“拉伸”。
有什么我想念的吗? 这似乎是一个愚蠢的问题,但我不能让这个工作!
由于
答案 0 :(得分:18)
StackPanel容器的大小始终为其内容的最小大小。我相信你想使用Grid而不是StackPanel;网格将尝试使用所有可用空间。
<Grid Margin="6,14,5,6" Grid.Row="1">
<ContentControl Name="WindowContent" Content="{Binding}" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" />
</Grid>
编辑:如果您想在网格中使用相同类型的堆叠功能,请执行以下操作:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
</Grid>
这将产生2个最小尺寸的行(如StackPanel),然后占用所有剩余可用空间的行。
答案 1 :(得分:0)
我发现使用UniformGrid是一个更令人满意的解决方案,因为它允许容器中的动态范围的项目,而无需使用事先已知的特定维度集。它对大量物品也有效。代码片段,我将其用作解决方案:
<Grid Name="AmericanFlag" Opacity="{Binding ElementName=AmericanFlagOpacity, Path=Value}">
<Grid.Resources>
<Color x:Key="OldGloryRed">#B22234</Color>
<Color x:Key="OldGloryWhite">#FFFFFF</Color>
<Color x:Key="OldGloryBlue">#3C3B6E</Color>
<Style x:Key="RedStripe" TargetType="Border">
<Setter Property="Background">
<Setter.Value>
<SolidColorBrush Color="{StaticResource OldGloryRed}"/>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="WhiteStripe" TargetType="Border">
<Setter Property="Background">
<Setter.Value>
<SolidColorBrush Color="{StaticResource OldGloryWhite}"/>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="Star" TargetType="Path">
<Setter Property="Fill">
<Setter.Value>
<SolidColorBrush Color="{StaticResource OldGloryWhite}"/>
</Setter.Value>
</Setter>
<Setter Property="Stretch" Value="Uniform"/>
<Setter Property="Data" Value="M 9,0 L 7,6 L 0,6 L 6,11 L 4,17 L 9,12 L 14,17 L 12,11 L 18,6 L 11,6 L 9,0"/>
</Style>
</Grid.Resources>
<Grid.RowDefinitions>
<RowDefinition Height="7*"/>
<RowDefinition Height="6*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="3*"/>
</Grid.ColumnDefinitions>
<UniformGrid
Grid.ColumnSpan="2"
Grid.RowSpan="2"
Columns="1"
Rows="13">
<Border Style="{StaticResource RedStripe}"/>
<Border Style="{StaticResource WhiteStripe}"/>
<Border Style="{StaticResource RedStripe}"/>
<Border Style="{StaticResource WhiteStripe}"/>
<Border Style="{StaticResource RedStripe}"/>
<Border Style="{StaticResource WhiteStripe}"/>
<Border Style="{StaticResource RedStripe}"/>
<Border Style="{StaticResource WhiteStripe}"/>
<Border Style="{StaticResource RedStripe}"/>
<Border Style="{StaticResource WhiteStripe}"/>
<Border Style="{StaticResource RedStripe}"/>
<Border Style="{StaticResource WhiteStripe}"/>
<Border Style="{StaticResource RedStripe}"/>
</UniformGrid>
<Border>
<Border.Background>
<SolidColorBrush Color="{StaticResource OldGloryBlue}"/>
</Border.Background>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="18*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="22*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<UniformGrid
Grid.Column="1"
Grid.Row="1"
Columns="1"
Rows="9">
<UniformGrid Columns="6" Rows="1">
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
</UniformGrid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="10*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<UniformGrid Grid.Column="1" Columns="5" Rows="1">
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
</UniformGrid>
</Grid>
<UniformGrid Columns="6" Rows="1">
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
</UniformGrid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="10*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<UniformGrid Grid.Column="1" Columns="5" Rows="1">
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
</UniformGrid>
</Grid>
<UniformGrid Columns="6" Rows="1">
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
</UniformGrid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="10*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<UniformGrid Grid.Column="1" Columns="5" Rows="1">
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
</UniformGrid>
</Grid>
<UniformGrid Columns="6" Rows="1">
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
</UniformGrid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="10*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<UniformGrid Grid.Column="1" Columns="5" Rows="1">
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
</UniformGrid>
</Grid>
<UniformGrid Columns="6" Rows="1">
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
<Path Style="{StaticResource Star}"/>
</UniformGrid>
</UniformGrid>
</Grid>
</Border>
</Grid>