2012-06-29 3 views
0

У меня есть список wpf, который реализует DataTemplate, который содержит TextBlock.Возможно ли вернуть более чем одно значение из ivalueconverter в wpf?

<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(); 
    } 
} 

Это работает. Цвет шрифта (переднего плана) станет красным при изменении связанного свойства.

Мой вопрос заключается в следующем: я хотел бы, чтобы мой шрифт изменился на красный, и полужирный, и курсив. Я знаю, что это возможно с помощью встроенных текстовых блоков, но можно ли использовать все три эти вещи с помощью моего конвертера?

Спасибо всем, у кого есть мысли и понимание, которые отвечают.

ответ

3

Не используйте для этого преобразователи, используйте DataTrigger и добавьте три соответствующих Setters.

(Вы можете вернуть несколько объектов, но было бы бессмысленно, поскольку все эти свойства принимают только один объект. В качестве альтернативы используется Binding.ConverterParameter, на котором вы можете включить преобразователь, чтобы вернуть правильное значение для в правильном имуществе вам все равно понадобятся три привязки, с другим параметром каждый, это очень уродливый)

+0

Благодарим за ваш быстрый комментарий. Я буду исследовать, как использовать DataTrigger! –

+0

@mherr, если этот ответ вам помог, вы должны принять его ... –

+0

Спасибо Marc, я знаю, что так работает этот сайт. Я потратил некоторое время на исследование DataTriggers, чтобы узнать, действительно ли это решит мою проблему. Я решил, что я не буду использовать DataTriggers, но они будут работать отлично, если я захочу. –