【发布时间】: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
标签: c# wpf height itemscontrol