2012-06-29 46 views
0

我有一个wpf列表框,它实现了一个包含TextBlock的DataTemplate。是否有可能从wpf中的ivalueconverter返回多个值?

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

This works。字体颜色(前景)将在更改绑定属性时变为红色。

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

谢谢大家有回应的想法和见解。

回答

3

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

(您可以返回多个对象,但是它会毫无意义,因为所有这些属性都只有一个对象,一个变量将使用Binding.ConverterParameter,然后您可以在转换器中切换以返回正确的值正确的属性,你仍然需要三个绑定,每个不同的参数,它是非常难看)

+0

感谢您的快速评论。我将研究如何使用DataTrigger! –

+0

@mherr如果这个答案帮助你,你应该考虑接受它... –

+0

谢谢马克,我知道这就是这个网站的工作原理。我花了一些时间调查DataTriggers,看看这是否确实能解决我的问题。我决定不打算使用DataTriggers,但如果我选择了它们,它们就可以正常工作。 –

相关问题