我想我有一个相当简单的目标,但似乎无法达成。
我想要实现的是带有标题的ItemsControl(因为我不想要列表的选择功能)。最好是静态标题。
目前,我正在使用一个网格来作为标题,然后将该网格复制到ItemsControl的ItemTemplate(DataTemplate)中,然后将它们放置在网格中的上方。它有点有效,但并不总是很好地对齐等问题。
然后我发现了HeaderedItemsControl,我认为这是一个绝妙的想法,但无法让它工作,它根本不显示标题。 我尝试过以下方法;
- 只需在Xaml的“Header”中输入文本
- 在ItemsControl.Header标记内部放置具有静态文本的TextBlocks的网格
- 将网格放置在HeaderTemplate(Datatemplate)中,并将其绑定到一个简单的对象
我正在Blend中完成所有这些工作,在一个小项目中进行测试,然后再将其移植到生产应用程序中,我只是使用我创建的简单样例数据源。
我可能完全错过了重点,但任何帮助都将不胜感激。
我的当前代码如下,首先是我的HeaderedItemsControl:
<HeaderedItemsControl Header="HeaderedItemsControl"
ItemsSource="{Binding Collection, Mode=Default}"
ItemTemplate="{DynamicResource ItemsControlDataTemplate}"
HeaderTemplate="{DynamicResource ItemsControlHeaderDataTemplate}"/>
然后我得到了一个预期工作的ItemTemple
<DataTemplate x:Key="ItemsControlDataTemplate">
<Grid d:DesignWidth="268">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.754*"/>
<ColumnDefinition Width="0.246*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Property1, Mode=Default}" TextWrapping="Wrap" d:LayoutOverrides="Height" HorizontalAlignment="Stretch" Margin="0" />
<TextBlock Text="{Binding Property2, Mode=Default}" TextWrapping="Wrap" d:LayoutOverrides="Height" Grid.Column="1" HorizontalAlignment="Left" Margin="0" />
</Grid>
</DataTemplate>
然后是标题,明显违反其工作原则,我已经尝试过使用绑定和在TextBlock.Text属性中使用纯文本
<DataTemplate x:Key="ItemsControlHeaderDataTemplate">
<Grid d:DesignWidth="268">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.754*"/>
<ColumnDefinition Width="0.246*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Header.Header1, Mode=Default, Source={StaticResource SampleDataSource6}}" TextWrapping="Wrap" HorizontalAlignment="Stretch" Margin="0"/>
<TextBlock Text="{Binding Header.Header2, Mode=Default, Source={StaticResource SampleDataSource6}}" TextWrapping="Wrap" d:LayoutOverrides="Height" Grid.Column="1" HorizontalAlignment="Left" Margin="0"/>
</Grid>
</DataTemplate>