我正在为自定义控件创建一个样式,它可以是两种颜色之一。
我的控件的属性是:{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;
}
答案 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));
}
显然,您需要更改我给出的示例中使用的颜色。