【问题标题】:How To Setup A Converter To Return Properties From Template如何设置转换器以从模板返回属性
【发布时间】:2016-05-25 15:22:09
【问题描述】:

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

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

【问题讨论】:

  • 能否请您也展示一下您的转换器类?
  • 我发布了 convert() 函数
  • 在您的转换器中返回 ValueWhenEqualValueWhenNotEqual 如果那是持有颜色的属性。

标签: wpf xaml viewmodel templatebinding


【解决方案1】:

可以去掉 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));
}

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

【讨论】:

    猜你喜欢
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多