是否可以从wpf中的ivalueconverter返回多个值?

时间:2012-06-29 14:12:41

标签: c# wpf xaml datatemplate ivalueconverter

我有一个wpf列表框,它实现了一个包含TextBlock的DataTemplate。

    <local:BooleanToFontColorConverter x:Key="boolToFontColor" />
    <DataTemplate x:Key="ListBox_DataTemplateSpeakStatus">
            <Label Width="Auto">
                    <TextBlock Foreground="{Binding Path=myProperty, Converter={StaticResource boolToFontColor}}" />
            </Label>
    </DataTemplate>

我的任务是改变“myProperty”,我希望字体的颜色不同。我的转换器看起来像这样:

public class BooleanToFontColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter,
                  CultureInfo culture)
    {
        if (value is Boolean)
        {
            return ((bool)value) ? new SolidColorBrush(Colors.Red) : new SolidColorBrush(Colors.Black);
        }

        return new SolidColorBrush(Colors.Black);
    }

    public object ConvertBack(object value, Type targetType, object parameter,
                              CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

这很有效。更改绑定属性后,字体颜色(前景)将变为红色。

我的问题是:我希望我的字体变为红色,粗体和斜体。我知道这可以通过使用文本块内联来实现,但是可以使用我的转换器完成所有这三件事吗?

感谢所有有回应的想法和见解的人。

1 个答案:

答案 0 :(得分:3)

请勿使用转换器,使用DataTrigger并为属性添加三个Setters

(你可以返回多个对象,但是它没有意义,因为所有这些属性只占用一个对象。一个alernative将使用Binding.ConverterParameter,然后你可以在转换器中返回对于正确属性的正确值,您仍然需要三个绑定,每个绑定具有不同的参数,它的非常丑陋)