在WPF中将网格行的高度绑定到其内容

15

我有一个带有几行的网格。在顶部行中,我有一个ItemsControl,它动态绑定到一个集合,并使用DataTemplateSelector和ItemsPanelTemplate(其中包含一个单独的水平排列的WrapPanel)。以下是我目前的简化版本:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="40" />
        <RowDefinition Height="2" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <GridSplitter Background="#666" Grid.Row="1" Height="Auto" Width="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
    <ItemsControl x:Name="items" Background="#DDD" Grid.Row="0" ItemTemplateSelector="{StaticResource itemTemplateSelector}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <WrapPanel Orientation="Horizontal" />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
    </ItemsControl>
</Grid>

我希望动态地设置第一行的高度,而不是将其高度设置为40。具体来说,我想根据ItemsControl必须适应所有内容的最小高度来设置它的高度。由于Grid Row的高度限制了ItemsControl的高度,我无法确定应该绑定哪个元素以及要绑定到哪个元素的属性。

将Grid Row的Height绑定到ItemsControl的“desired height”似乎是有意义的。因此,我找到了DesiredSize属性,并将我的RowDefinition的Height绑定到ItemsControl的DesiredSize.Height。这在首次加载时有效,但在调整控件大小时不会更新(记住,我正在使用WrapPanel作为我的ItemsPanelTemplate,因此随着我调整窗口大小,ItemsControl的高度应该发生变化)。

是否有人知道绑定框架是否支持这种情况,或者我是否需要添加事件处理程序代码来完成此操作?

谢谢。

1个回答

40

你尝试将高度设置为自动吗?以达到你想要的效果:

<RowDefinition Height="Auto"/>
(或者我想得太简单了吗..?)

1
是的...有时候简单的解决方案会逃脱你的注意。谢谢。 - Rich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接