我有一个带有几行的网格。在顶部行中,我有一个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的高度应该发生变化)。
是否有人知道绑定框架是否支持这种情况,或者我是否需要添加事件处理程序代码来完成此操作?
谢谢。