1

我有以下情况。某处有DynamicResource颜色。这种颜色决定了窗口的背景,并根据我想选择要显示的正确图标(亮或暗)的颜色。

我想象以下场景:

  • 颜色变化,引发我班级的变化
  • 我的班级检查,应该选择哪个图标集
  • 它强制这些图标的所有用户重新加载它们。

我想,这应该可以使用 WPF 机制来实现。问题是,我不太清楚,如何构建架构,它将进行这样的处理。

  1. 捕捉颜色变化。我想,我可以编写一个带有DependencyProperty调用的类,例如,BackgroundColor然后通过DynamicResource. 这样我就可以使用PropertyChangedCallback.
  2. 内部处理很容易。
  3. 我必须公开我的图标,以便它们可以通过该DynamicResource机制附加。如何?通过某种收藏?每个都有自己的 DependencyProperty?
  4. 我必须通知这些图标的所有用户,它们已更改。如何?通过 IObservableCollection?在代表图标的每个属性上调用 NotifyPropertyChanged?也许以其他方式?

如果有更简单的方法来实现我提出的目标,我会很高兴听到它:)

4

1 回答 1

1

您可以创建一个浅色和深色WPF 主题,然后根据当前设置为颜色的颜色在它们之间切换background。使用此方法,WPF 将负责所有图标更新。

如果您想创建自己的系统,您可以使用该DependencyProperty系统来帮助您:

Background颜色改变:

您可以简单地将PropertyChangedCallback处理程序添加到当前Background属性:

static YourControl()
{
    Control.BackgroundProperty.OverrideMetadata(typeof(YourControl), 
        new PropertyMetadata(Brushes.White, OnBackgroundChanged));
}

private static void OnBackgroundChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    // The Background property value changed
}

暴露图标并通知 UI:

您可以创建一个包含string属性的类,以将数据绑定到Image.Source以下格式的每个属性:

"\ApplicationName;component/ImageFolderName/ImageName.FileExtension"

只要这个类实现了INotifyPropertyChanged接口,那么您需要做的就是更改这些string值,UI 将自动更新为新的图标或图像。

于 2013-12-03T11:01:01.027 回答