2

我需要覆盖 ListViewItem 的预定义样式以使选择不可见。如果我将整个样式复制到我的资源中并进行编辑,我知道该怎么做。但我不敢相信没有比复制整个风格更轻松的方法了。所以我发现默认的 ListViewItem 样式使用以下画笔进行选择:

<UserControl.Resources>
    <SolidColorBrush x:Key="ListViewItemPointerOverBackgroundThemeBrush" Color="Yellow" />
    <SolidColorBrush x:Key="ListViewItemSelectedBackgroundThemeBrush" Color="Yellow" />
    <SolidColorBrush x:Key="ListViewItemSelectedForegroundThemeBrush" Color="Yellow" />
    <SolidColorBrush x:Key="ListViewItemSelectedPointerOverBackgroundThemeBrush" Color="Yellow" />
    <SolidColorBrush x:Key="ListViewItemSelectedPointerOverBorderThemeBrush" Color="Yellow" />
</UserControl.Resources>

注意:我已将所有这些画笔放到我的 UserControl 中,并将它们全部设置为黄色。但是我的 UI 中没有任何黄色,唉。所以问题是:如何强制默认模板使用我覆盖的画笔?第二个(可选)问题:也许我做错了,有更好的方法来实现我的目标吗?

4

4 回答 4

4

您必须在 App.xaml 文件中覆盖它们,就像这样(至少我是这样做的):

<ResourceDictionary.ThemeDictionaries>
    <ResourceDictionary x:Key="Default">
        <SolidColorBrush x:Key="ListViewItemSelectedPointerOverBorderThemeBrush" Color="Transparent" />
        <SolidColorBrush x:Key="ListViewItemPointerOverBackgroundThemeBrush" Color="Transparent" />
        <SolidColorBrush x:Key="ListViewItemSelectedPointerOverBackgroundThemeBrush" Color="Transparent" />
        <SolidColorBrush x:Key="ListViewItemSelectedBackgroundThemeBrush" Color="Transparent" />
    </ResourceDictionary>
</ResourceDictionary.ThemeDictionaries>

如果您需要更多自定义(在我的情况下 ListView 项目是一些图片),这里有一个非常有用的链接,用于更改默认颜色控件

于 2013-02-14T09:20:06.300 回答
4

正如 Vasile 所说,您需要覆盖画笔,这必须在 App 级别完成,据我所知,如果您只想更改一个控件或在一页上,您将需要对整个控件进行模板化。

如果你好奇,你可以在:C:\Program Files (x86)\Windows Kits\8.0\Include\WinRT\Xaml\Design 下找到所有的画笔

要覆盖您在 App.xaml/resource 字典中添加的列表视图颜色,我在此处添加了一些注释,以便您可以看到哪个画笔做了什么:

在此处输入图像描述

在此处输入图像描述

            <ResourceDictionary x:Key="Default">

             <!--After selection - Background-->
            <SolidColorBrush x:Key="ListViewItemSelectedBackgroundThemeBrush" Color="Yellow"></SolidColorBrush>

             <!--When pointer hovers over an item - Background-->
            <SolidColorBrush x:Key="ListViewItemPointerOverBackgroundThemeBrush" Color="Red"></SolidColorBrush>

             <!--When the item is selected (first few milliseconds) - Background-->
            <SolidColorBrush x:Key="ListViewItemSelectedPointerOverBackgroundThemeBrush" Color="Green"></SolidColorBrush>

             <!--When the item is selected (first few milliseconds) - Border-->
            <SolidColorBrush x:Key="ListViewItemSelectedPointerOverBorderThemeBrush" Color="Black"></SolidColorBrush>

        </ResourceDictionary>
于 2013-02-14T10:29:57.087 回答
1

在共享 App.xaml 中的 Windows 8.1 通用应用程序中,我使用此代码

<Application
    x:Class="XXX.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:XXX">

    <Application.Resources>
        <ResourceDictionary>
            <SolidColorBrush x:Key="ListViewItemPointerOverBackgroundThemeBrush" Color="Transparent" />
        </ResourceDictionary>
    </Application.Resources>
</Application>
于 2014-05-28T08:35:39.203 回答
0

我以前一直在尝试类似的事情,但没有运气。我认为您只需要更新整个模板。

于 2013-02-14T07:15:15.337 回答