xaml - 自定义 GroupItem HeaderTemplate UWP

标签 xaml uwp uwp-xaml

我正在做一个 UWP 项目,我不想自定义组项的 HeaderTemplate,但我无法找到如何完全自定义它。

     <ListView ItemsSource="{x:Bind ContactsCVS.View}"
                      ItemTemplate="{StaticResource ContactListViewTemplate}"
                      SelectionMode="Single"
                      ShowsScrollingPlaceholders="True"
                      Grid.Row="1"
                      Grid.ColumnSpan="2">

                <ListView.GroupStyle>
                    <GroupStyle >
                        <GroupStyle.HeaderTemplate>
                            <DataTemplate x:DataType="data:GroupInfoList">
                                <TextBlock Text="{x:Bind Key}" 
                                           Style="{ThemeResource itleTextBlockStyle}"/>
<!-- Can't fully customize this part ?-->
                            </DataTemplate>
                        </GroupStyle.HeaderTemplate>
                    </GroupStyle>
                </ListView.GroupStyle>
            </ListView>

我的测试基于这个官方示例:

https://github.com/Microsoft/Windows-universal-samples/blob/de1bb527ec0327b767397d4c1a74a797356f4357/Samples/XamlListView/cs/Samples/SimpleListViewSample/SimpleListViewSample.xaml

我尝试用蓝色条和自定义文本替换字母 A、B、C...。看起来很简单,但不明白它是如何工作的。

谢谢

最佳答案

HeaderTemplate 定义了 header 内容的模板,但显示此内容的实际控件是 ListViewHeaderItem。如果你愿意的话,你实际上可以简单地这样做:

<GroupStyle.HeaderTemplate>
    <DataTemplate x:DataType="data:GroupInfoList">
        <Border Background="LightSkyBlue">
            <TextBlock Text="My custom text" />
        </Border>
    </DataTemplate>
</GroupStyle.HeaderTemplate>

ListView 渲染时,每个组的 ListViewHeaderItem 都会显示上述内容,但控件本身仍然有自己的默认样式。

如果您还想设置控件的样式(例如使其水平拉伸(stretch)或其他),则必须为 HeaderContainerStyle 创建自己的样式:

<GroupStyle.HeaderContainerStyle>
    <Style TargetType="ListViewHeaderItem">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListViewHeaderItem">
                    <ContentPresenter
                        x:Name="ContentPresenter"
                        Background="Red"
                        Margin="0"
                        HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
                        VerticalContentAlignment="Stretch"
                        Content="{TemplateBinding Content}"
                        ContentTemplate="{TemplateBinding ContentTemplate}"
                        ContentTransitions="{TemplateBinding ContentTransitions}" />
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</GroupStyle.HeaderContainerStyle>

ContentPresenter 负责显示控件的Content,在本例中,内容是 HeaderTemplate 内的内容。

关于xaml - 自定义 GroupItem HeaderTemplate UWP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51281615/

相关文章:

xaml - 如何在App.xaml中设置全局自定义字体

image - 在按钮中居中图标和文本 Xamarin XAML

c# - UWP - 内部编译器错误 : An item with the same key has already been added

c# - 如何更改网格中所有文本框的字体大小,windows app uwp

c# - 从应用程序数据本地文件夹在 UWP 中的 xaml 中的 WebView 中加载 Html 文件

c# - Xaml,按钮的click事件在命令之前运行?

c# - UWP 相当于 Timer.Elapsed 事件

wpf - 如何使 WPF ListView 项目水平重复,就像水平滚动条一样?

c# - 我的 Microsoft.Windows.Themes 程序集在哪里?

c# - ComboBox 中的默认加载值 - WPF MVVM