1

好的,我已经准备好接受我做错了,但这就是我到目前为止的想法。

我有几个 ListView。它们中有 FileSystemInfo 项。样式(来自资源字典)基于项目的对象类型应用(基于如何根据项目的类设置 ListViewItem 的样式)。

我想让用户能够更改正在应用的颜色。为此,我使用此处建议的方法(http://svetoslavsavov.blogspot.com/2009/07/switching-wpf-interface-themes-at.html)在编辑后重新加载 ResourceDictionary(目前,通过 Notepad++ )。

这不会导致 ListView 项目重绘并且颜色不会改变。我试图简单地使用两个 Resource xaml 文件,并且也不会更新颜色。

那么,更新控件颜色的最佳实践是什么,然后将其保存以供用户下次运行应用程序时使用?

<-- 编辑-->

具体来说,我所做的是:

1) 我制作了一个使用 ResourceDictionary 中的颜色的样式。像这样:

<Color x:Key="DirItemBkgdColor1" />
<Color x:Key="DirItemBkgdColor2" />

<Style x:Key="DirListViewItem" TargetType="ListViewItem">
    <Setter Property="Background">
        <Setter.Value>
            <LinearGradientBrush>
                <GradientStop Color="{DynamicResource DirItemBkgdColor1}" Offset="0"/>
                <GradientStop Color="{DynamicResource DirItemBkgdColor2}" Offset="1"/>
            </LinearGradientBrush>
        </Setter.Value>
    </Setter>
</Style>

2)我为我想改变的每种颜色进行了设置。3)我用另一个修改了一个:

this.Resources["DirItemBkgdColor1"] = FileTrackerWPF.Properties.Settings.Default.DirectoryBackColor1;
this.Resources["DirItemBkgdColor2"] = FileTrackerWPF.Properties.Settings.Default.DirectoryBackColor2;

我将这些代码行放在应用程序的 OnStartup() 和我的应用程序的配置窗口中,它就像一个魅力。现在将其扩展几十个(这是一个沉重的 UI)。

4

1 回答 1

1

这是我的做法:

  1. 确保所有需要颜色的控件都从同一个动态资源中获取。
  2. 允许用户选择颜色。扩展的 WPF 工具包有一个颜色选择器
  3. 将颜色保存在特定于用户的设置文件中。
  4. 当他们选择颜色和应用程序加载时,用保存的设置覆盖资源。
于 2013-03-05T15:28:12.177 回答