【问题标题】:Stretch height of nested ItemsControl嵌套 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

标签: c# wpf height itemscontrol


【解决方案1】:

从我上面的评论中添加,结果证明是问题所在。

您的用户控件明确设置了HeightWidth,这意味着它们不会自动调整大小/拉伸以适应您想要的子控件。

删除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>

【讨论】:

    猜你喜欢
    • 2022-01-12
    • 1970-01-01
    • 2014-10-14
    • 2011-01-24
    • 2019-10-26
    • 1970-01-01
    • 2016-08-18
    • 2017-02-26
    • 1970-01-01
    相关资源
    最近更新 更多