【问题标题】:How to update colors, in place, and save them for use next time?如何更新颜色,到位,并保存以备下次使用?
【发布时间】:2013-03-05 15:25:32
【问题描述】:

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

我有几个 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 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)。

【问题讨论】:

    标签: wpf themes resourcedictionary


    【解决方案1】:

    我会这样做:

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

    【讨论】:

    • 那么 ResourceDictionary 会从设置中加载它的颜色吗?无需外部化 RD。我看看是不是我的意思。感谢您的帮助。
    • 是的,这样对用户来说可能更容易。
    • 谢谢,在弄清楚我真正想做的事情之后,这是一个很大的帮助。我发现 WPF 最大的问题是弄清楚我在新的 XAML 上下文中真正想要做什么。非常感谢!
    猜你喜欢
    • 2019-06-10
    • 2019-07-11
    • 1970-01-01
    • 1970-01-01
    • 2018-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多