0

2 つの色のいずれかになるカスタム コントロールのスタイルを作成しています。

私のコントロールのプロパティは次のとおりです。{SolidColorBrush color1、SolidColorBrush color2、bool usingColor1}。

usingColor1 にバインドし、color1 または color2 を返すコンバーターを作成しようとしています。コンバーターを次のように定義したいと思います。

<Style.Resources>
      <Converters:ValueParameterComparisonConverter x:Key="Color1WhenTrue" ValueWhenEqual="{DataTemplateKey Color1}" ValueWhenNotEqual="{DataTemplateKey Color2}"/>
</Style.Resources>

そして、私のコンバーターを次のように使用します。

<Border Background="{TemplateBinding UsingColor1, Converter={StaticResource Color1WhenTrue}}" />

これをコードに実装しましたが、機能しません。DataTemplateKey が何をするのか理解できず、このシナリオの正しい言葉だとは思いません。

テンプレートからプロパティを返すようにコンバーターを設定するにはどうすればよいですか?

編集:

コンバーター コードの興味深い部分は次のとおりです。

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
      bool isEqual;
      if (value == null)
      {
        isEqual = null == parameter;
      }
      else
      {
        isEqual = value.Equals(parameter);
      }

      return isEqual ? this.ValueWhenEqual : this.ValueWhenNotEqual;
}
4

1 に答える 1

0

valueWhenEqual パラメータを取り除くことができます。

<Style.Resources>
      <Converters:ValueParameterComparisonConverter x:Key="Color1WhenTrue"/>
</Style.Resources>

templatebinding ではなくバインディングを使用してください。

<Border Background="{Binding UsingColor1, Converter={StaticResource Color1WhenTrue}}" />

次に、コンバーターを変更して、true の場合は必要な色を返し、false の場合は別の色を返します。

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
  var usingColor1 = (bool)value;

  return usingColor1 ? new SolidColorBrush(Color.FromRgb(179, 255, 179)) : new SolidColorBrush(Color.FromRgb(255, 100, 0));
}

明らかに、私が示した例で使用されている色を変更する必要があります。

于 2016-06-07T11:43:21.693 に答える