嵌套 ItemsControl 的拉伸高度
Posted
技术标签:
【中文标题】嵌套 ItemsControl 的拉伸高度【英文标题】:Stretch height of nested ItemsControl 【发布时间】:2013-08-20 13:42:13 【问题描述】:在 MainWindow 上,我有一个 ItemsControl
,我将其添加到 UserControls
,并且说 UserControl
还包含一个 ItemsControl
,其中包含其他 UserControls
。
问题是第二个 ItemsControl 中的许多项目没有显示,因为它们超出了 UserControl 在 MainWindow 上显示的高度。
如何确保第一个 ItemsControl 中的 UserControls 始终伸展到足以显示其 ItemsControl 中的所有 UserControls?为了反复试验,我尝试通过 ItemTemplate 进行拉伸,但这并没有改变任何事情。
<Window x:Class="X.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<DataTemplate x:Key="DataTemplate1">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<ItemsPresenter Grid.Row="0" Grid.Column="0" DataContext="Binding"/>
</Grid>
</DataTemplate>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<ItemsControl Grid.Row="0" x:Name="ic" ItemTemplate="DynamicResource DataTemplate1"/>
</Grid>
</Window>
--
<UserControl x:Class="X.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d" Height="113" Width="209">
<UserControl.Resources>
<DataTemplate x:Key="DataTemplate1">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<ItemsPresenter DataContext="Binding"/>
</Grid>
</DataTemplate>
</UserControl.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Label Grid.Row="0" Content="Label" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top"/>
<ItemsControl Grid.Row="1" x:Name="ic" Margin="0,36,0,0" ItemTemplate="DynamicResource DataTemplate1"/>
</Grid>
</UserControl>
--
<UserControl x:Class="X.UserControl2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d" Height="40" Width="64">
<Grid>
<Label Content="Label2" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top"/>
</Grid>
</UserControl>
【问题讨论】:
您的问题不仅仅是两个 UserControl 都指定了高度/宽度,是吗(第一个不会拉伸)? @Chris 这确实成功了。我认为用户控件的宽度和高度只会影响设计时间,请问您能否将其添加为答案? 会做,很高兴原来是问题所在。 =D 稍作跟进,您可以使用命名空间xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
使用d:DesignHeight="500" d:DesignWidth="500"
设置设计时的高度和宽度。 Visual Studio 2012 在创建新的UserControl
时似乎默认执行此操作
@Chris 是的,这也是它默认为我所做的,但是当我在 GUI 编辑器中调整窗口大小时,它显然将它从 DesignHeight 更改为正常高度,这就是它没有发生的原因对我来说,这是造成它的原因。感谢您的提示;D
【参考方案1】:
从我上面的评论中添加,结果证明是问题所在。
您的用户控件明确设置了Height
和Width
,这意味着它们不会自动调整大小/拉伸以适应您想要的子控件。
删除Height
(最好是Width
),应该可以解决问题:
<UserControl x:Class="X.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d" />
<!-- Your Code -->
</UserControl>
【讨论】:
以上是关于嵌套 ItemsControl 的拉伸高度的主要内容,如果未能解决你的问题,请参考以下文章
具有 display:table 样式的嵌套 div 在 IE 中不会拉伸到 100% 高度
在 flexbox 中使用“高度:100%”和“对齐项目:拉伸”[重复]
UIScrollView 中的嵌套 UIStackView 子项不会拉伸以填充