13

我有一个有几行的网格。在第一行,我有一个 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 必须适合其所有内容的最小高度动态设置它。由于 ItemsControl 的高度受 Grid Row 的高度限制,我无法确定我应该绑定哪个元素以及我应该将它绑定到哪个元素的属性。

将网格行的高度绑定到 ItemsControl 的“所需高度”是有意义的。因此,我找到了 DesiredSize 属性并将我的 RowDefinition 的高度绑定到 ItemsControl 的 DesiredSize.Height。这在它第一次加载时有效,但在我调整控件大小时不会更新(请记住,我使用 WrapPanel 作为我的 ItemsPanelTemplate,所以当我调整窗口大小时,ItemsControl 的高度应该会改变)。

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

谢谢。

4

1 回答 1

37

您是否尝试将高度设置为 Auto 以实现您想要的:

<RowDefinition Height="Auto"/>

(或者我在这里想得太简单了..?)

于 2009-05-08T08:28:46.523 回答