6

ビジネス エンティティのさまざまな状態に静的リソースを設定しようとしています。値コンバーターを使用してビジネスエンティティを取得し、アルゴリズムに応じて対応する背景ブラシを返すことができるという考えです。リソースを静的にして、デザイナーで設計し、手動で切り替えて、開発中にどのように見えるかをプレビューしながら、プログラムで使用できるようにしたいと考えています。

目的は、これらの線に沿って何かを持つことです:

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var data = value as DummyData;

        if (data == null)
            return null;

        //Find resources
        if (data.VarianceAmount >= 0)
            return StaticResources.HighBackground;
        else
            return StaticResources.LowBackground;
    }

静的リソースが階層内のページ/コントロール/フレームワーク要素で宣言されている場合、値コンバーター内からどのようにアクセスしますか? 値コンバーターを DependencyObject に設定しましたが、そこから階層をナビゲートする方法がわかりません。

4

1 に答える 1

12

秘訣は、作成時に必要なリソース値をコンバーターに渡すことです。

例えば、

  public class CustomColorConverter : IValueConverter
  {
     public SolidColorBrush HighBackground { get; set; }
     public SolidColorBrush LowBackground { get; set; }

     // remaining implementation...
  }

次に、Xaml リソース セクションで、次のように宣言します (もちろん、独自のリソースを使用します)。

<local:CustomColorConverter x:Key="BackgroundConverter" 
    HighBackground="{StaticResource HighlightBrush}" 
    LowBackground="{StaticResource NormalBrush}" />

これは、再利用できるという利点があります。新しいキーで別のインスタンスを作成し、異なるブラシを定義できます。

さらに、これは、SolidColorBrushes だけでなく、ほぼすべての機能に使用できます。完全なスタイルまたはテンプレートも定義できます。

それが役立つことを願っています。

于 2012-08-02T14:09:57.047 に答える