1

次のシナリオがあります。どこかにDynamicResourceウィズカラーがあります。この色はウィンドウの背景を決定し、その色に基づいて、表示する適切なアイコン (明るいまたは暗い) を選択します。

次のシナリオを想像します。

  • 色が変わる クラスチェンジのきっかけ
  • 私のクラスは、どのアイコンセットを選択する必要があるかをチェックします
  • これらのアイコンのすべてのユーザーにそれらの再読み込みを強制します。

これは、WPF メカニズムを使用して実行できるはずです。問題は、そのような処理を行うアーキテクチャを構築する方法がよくわからないことです。

  1. 色の変化を捉えます。DependencyPropertyと呼ばれるクラスを記述し、BackgroundColorその色をDynamicResource. このようにして、 を使用して色の変化をキャプチャできPropertyChangedCallbackます。
  2. 内部処理が容易です。
  3. DynamicResourceメカニズムを介してアタッチできるように、アイコンを公開する必要があります。どのように?ある種のコレクションで?それぞれ独自の DependencyProperty によるものですか?
  4. これらのアイコンが変更されたことをすべてのユーザーに通知する必要があります。どのように?IObservableCollection で? アイコンを表す各プロパティで NotifyPropertyChanged を呼び出しますか? 多分他の方法で?

私が提示した目標を達成するためのより簡単な方法があれば、喜んで聞きます:)

4

1 に答える 1

1

明るい WPF テーマと暗い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 に答える