MultiBinding to Background属性不起作用。当它被转换时,背景只是变成系统的默认颜色,而不是我在MultiValueConverter中设置的颜色。其他一切都设置得很好。我的多重绑定到后台有什么问题?
<Style.Triggers>
<DataTrigger Binding="{Binding Source={StaticResource triggerResource},
Path=MyIsSelected}"
Value="True">
<Setter Property="Background">
<Setter.Value>
<MultiBinding Converter="{StaticResource groupNameToBackgroundConv}">
<Binding Path="Name" />
<Binding Source="{StaticResource selectedGroupName}" Path="Name" />
</MultiBinding>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
我的MultiValueConverter是
public class GroupNameToBackgroundConv : IMultiValueConverter
{
private const string DEFAULT_COLOR = "#B8CBE9";
private const string SELECTED_COLOR = "#FFFF00";
public object Convert(object[] values, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
string groupName = values[0] as string;
string selectedGroupName = values[1] as string;
if (groupName == null)
return DEFAULT_COLOR;
if (selectedGroupName == null)
return DEFAULT_COLOR;
if (groupName == selectedGroupName)
{
return SELECTED_COLOR;
}
else
{
return DEFAULT_COLOR;
}
} // ends method
public object[] ConvertBack(object value, Type[] targetTypes, object parameter,
System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
} // ends class
我解决了这个问题。当Convert返回一个值时,它需要是Brush,而不是字符串或Color控件扩展器的后台属性。这是我的转换器。
public class GroupNameToBackgroundConv : IMultiValueConverter
{
private Color DEFAULT_COLOR = (Color)ColorConverter.ConvertFromString("#B8CBE9");
private Color SELECTED_COLOR = (Color)ColorConverter.ConvertFromString("#FFFF00");
public object Convert(object[] values, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
string groupName = values[0] as string;
string selectedGroupName = values[1] as string;
if (groupName == null)
return ColorOrBrush(DEFAULT_COLOR, targetType);
if (selectedGroupName == null)
return ColorOrBrush(DEFAULT_COLOR, targetType);
if (groupName == selectedGroupName)
{
return ColorOrBrush(SELECTED_COLOR, targetType);
}
else
{
return ColorOrBrush(DEFAULT_COLOR, targetType);
}
} // ends method
private object ColorOrBrush(Color c, Type targetType)
{
if (targetType == typeof(Color))
return c;
else if (targetType == typeof(Brush))
return new SolidColorBrush(c);
else
return null;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter,
System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
} // ends class