我正在尝试使用Grid创建ItemsControl,以确保整个空间被占用并在列之间拆分。例如,使用DataTemplates这样的事情:
Grid-Control是我找到的唯一一个具有此属性的控件。 由于网格在动态细胞方面效果不佳,我在这里使用了答案来绑定我的模型: WPF Grid as ItemsPanel for a list dynamically bound to an ItemsControl
到目前为止,我的代码看起来像这样:
<DataTemplate x:Key="DtTaskBoardSection" DataType="{x:Type m:TaskBoardSection}">
<uc:TaskBoardSectionControl
AttachedTaskBoardSection="{Binding}" />
</DataTemplate>
<DataTemplate x:Key="DtTaskBoardSectionList" DataType="{x:Type m:TaskBoardSectionList}">
<ItemsControl ItemsSource="{Binding}" ItemTemplate="{StaticResource DtTaskBoardSection}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid
ShowGridLines="True"
xf:DynamicGridSizeBinding.ColumnCount="{Binding Count}"
Background="LightGreen" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<!--https://stackoverflow.com/questions/2432847/bind-grid-row-grid-column-inside-a-datatemplate-->
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="HorizontalAlignment" Value="Stretch" />
<Setter Property="Grid.Column" Value="{Binding Sequence}" />
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
</DataTemplate>
不幸的是,在真实的项目中,它现在只是像StackPanel一样堆叠控件:
浅绿色背景代表网格,但我希望我的两个测试控件只占每个地方的50%,但事实并非如此。
不幸的是,我很难深入了解ItemTemplate-Logic的内部结构,但似乎覆盖它会导致Grid不仅覆盖直接的Item-Properties,而且还会覆盖Content-Alignment的一些重要内容。 。 我想我在这里错过了Logic的一部分,你能不能给我一个提示,我错过了WPF-Templating程序的哪一部分?
答案 0 :(得分:3)
您的DynamicGridSizeBinding.ColumnCount
属性可能正在创建ColumnDefinitions,其宽度的GridUnitType
设置为Auto
,而它应该是Star
:
new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) };
但是,对于大小均匀的列,您不需要具有附加ColumnCount
属性的Grid。最好使用单行的UniformGrid:
<ItemsControl ItemsSource="{Binding}" ItemTemplate="{StaticResource DtTaskBoardSection}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="1"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>