如何设置转换器从模板返回属性

时间:2016-05-25 15:22:09

标签: wpf xaml viewmodel templatebinding

我正在为自定义控件创建一个样式,它可以是两种颜色之一。

我的控件的属性是:{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;
}

1 个答案:

答案 0 :(得分:0)

你可以摆脱valueWhenEqual参数;

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

只使用绑定而不是模板绑定;

<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));
}

显然,您需要更改我给出的示例中使用的颜色。