如何在适当的位置更新颜色,并保存下次使用?

时间:2013-03-05 15:25:32

标签: wpf themes resourcedictionary

好的,我已经准备好接受我做错了,但这是我到目前为止所提出的。

我有几个ListView。它们中包含FileSystemInfo项。根据项目的对象类型(基于How to set the Style of a ListViewItem based on the class of the item)应用样式(来自资源字典)。

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

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

那么,在适当的位置更新控件颜色的最佳做法是什么,然后将其保存以供用户下次运行应用程序时使用?

< - 编辑 - >

具体来说,我所做的是:

1)我创建了一个使用ResourceDictionary中的Color的Style。像这样:

<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()和我的应用程序的Config窗口中,它就像一个魅力。现在要扩展几十个(这是一个沉重的用户界面)。

1 个答案:

答案 0 :(得分:1)

我将如何做到这一点:

  1. 确保所有需要颜色的控件都来自同一动态资源。
  2. 允许用户选择颜色。 Extended WPF toolkit has a color picker
  3. 将颜色保存在特定于用户的settings file中。
  4. Override the resource在选择颜色和应用程序加载时使用已保存的设置。