我在设计XAML时面临以下问题。
我需要到达最后才能像网格一样安排我的数据但使用自定义DataTemplate
。
所以我创建了一个顶部Grid
,其中包含数据项的两个标题标签。
在Grid
下方,我构建了StackPanel
ItemsControl
,其中包含DataTemplate
,其中显示了我的数据。一切都很好,当我运行应用程序时,我得到标题标签和下面的数据项像网格。我的问题是标签和项目的内容没有正确对齐。所以我考虑将标题标题列的Width
绑定到ActualWidth
的{{1}},但不幸的是,这不起作用。
有没有干净的方法来实现这个目标?
提前谢谢......
答案 0 :(得分:5)
有一种简单的方法可以在网格列中使用SharedSizeGroup
并为父级分配Grid.IsSharedSizeScope="True"
。
e.g。
<StackPanel Grid.IsSharedSizeScope="True">
<Grid Name="Headers">
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="A"/>
<ColumnDefinition SharedSizeGroup="B"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="Name"/>
<TextBlock Grid.Column="1" Text="Occupation"/>
</Grid>
<ItemsControl Name="Items" ItemsSource="{Binding Data}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="A"/>
<ColumnDefinition SharedSizeGroup="B"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding Name}"/>
<TextBlock Grid.Column="1" Text="{Binding Occupation}"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
所有项目在列中都具有相同的宽度,您可能需要手动排列的唯一内容是项目上方的标题部分,具体取决于边距设置等。