0

我正在为可以是两种颜色之一的自定义控件制作样式。

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

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

<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 回答