通用 Windows 平台的 ListView hovered/selected 状态样式

Styling ListView hovered/selected state for Universal Windows Platform

我想更改通用 Windows 平台应用程序中 ListView 的默认样式。默认 ListView 项目的悬停颜色为浅灰色,点击为浅蓝色,选定项目为深蓝色。

我试着搜索了一下,几乎每一段代码都试过了,但没有成功。这是我的 xaml 的 ListView:

<Page.Resources>
    <DataTemplate x:Key="MasterListViewItemTemplate" x:DataType="model:Thread">
        <Grid Margin="0,11,0,13">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="35"/>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <Ellipse Grid.Column="0" Width="35" Height="35" VerticalAlignment="Top">
                <Ellipse.Fill>
                    <ImageBrush ImageSource="{x:Bind Photo}"/>
                </Ellipse.Fill>
            </Ellipse>
            <TextBlock Grid.Column="1" Text="{x:Bind Name}"/>
        </Grid>
    </DataTemplate>
</Page.Resources>

<ListView
    x:Name="MasterListView"
    ItemContainerTransitions="{x:Null}"
    ItemTemplate="{StaticResource MasterListViewItemTemplate}"
    IsItemClickEnabled="True"
    ItemClick="MasterListView_ItemClick">
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch" />
        </Style>
    </ListView.ItemContainerStyle>
</ListView>

所有这些都在 ListViewItem 样式中定义。您可以覆盖它并轻松更改所需的值。我不会复制粘贴完整的样式,因为它很大而且 you can find it here.

您也可以只覆盖一些困扰您的颜色。同时link你会发现ListViewItemPresenterSelectedPressedBackground等属性设置为ThemeResources.

SelectedPressedBackground="{ThemeResource SystemControlHighlightListAccentHighBrush}"

这意味着覆盖这些资源可能是您完成所需任务所需的最低限度(覆盖 SystemControlHighlightListAccentHighBrush 等),但请记住,这样做会覆盖完整应用程序的那些资源,这可能不是什么你期待