aov*_*ven 1 wpf xaml itemscontrol
我有一个带有以下ItemTemplate的ItemsControl:
<DataTemplate x:Key="myItemTemplate">
<TextBlock Height="???" Text="{Binding Path=Description}" />
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何在模板中设置TextBlock的高度,以便自动假定ItemsControl.Height div ItemsCount
垂直空间量?
当只有一个项目时,我希望它是容器的整个高度,当有两个时,每个应该是一半大小,依此类推.
如果可能的话,我宁愿在XAML中完全这样做,以保持我的ViewModel清除UI逻辑.
您可以使用a UniformGrid
作为您ItemsPanelTemplate
的Rows
属性并将属性绑定到您的项目数ItemsControl
,如下所示:
<ItemsControl>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="{Binding Items.Count, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ItemsControl}}}" IsItemsHost="True"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)
我没有测试这段代码,所以你需要检查它,但我认为这个想法很清楚.
编辑:正如下面John所指出的,这段代码更容易:
<ItemsControl>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="1" IsItemsHost="True"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)