2

我需要根据某些条件将画笔设置为红色或橙色,如果不满足任何条件,则回退到默认画笔。

如果 windows phone 有样式触发器,这将是微不足道的,但因为它没有,我必须为每个场景创建一个特殊用途的转换器,如下所示:

public class StatusToColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var status = (Status)value;
        if (status.IsCancelled)
        {
            return new SolidColorBrush(Colors.Red);
        }
        else if (status.IsDelayed)
        {
            return new SolidColorBrush(Colors.Orange);
        }
        else 
        {
            return parameter;
        }
    }
}

并像这样使用它:

<TextBlock Foreground="{Binding Status, 
                                Converter={StaticResource statusToColorConverter},
                                ConverterParameter={StaticResource PhoneForegroundBrush}}" />

但现在我需要一个根据条件返回PhoneForegroundBrush或返回的转换器。PhoneDisabledBrush

我不能传递两个参数,而且 windows phone 也不支持 MultiBindings。我虽然这样:

<TextBlock Foreground="{Binding Status, 
                                Converter={StaticResource statusToColorConverter},
                                ConverterParameter={Binding RelativeSource={RelativeSource Self}}

所以我可以在参数中获取文本块,然后用它来查找资源,但它也不起作用。

有任何想法吗?

4

1 回答 1

6

您可以将画笔直接声明为转换器的属性:

public class StatusToColorConverter : IValueConverter
{
    public Brush CancelledBrush { get; set; }
    public Brush DelayedBrush { get; set; }

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var status = (Status)value;

        if (status.IsCancelled)
        {
            return this.CancelledBrush;
        }

        if (status.IsDelayed)
        {
            return this.DelayedBrush;
        }

        return parameter;
    }

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

然后,在初始化转换器时从 XAML 中填充它们:

<my:StatusToColorConverter x:Key="StatusToColorConverter" CancelledBrush="{StaticResource CancelledBrush}" DelayedBrush="{StaticResource DelayedBrush}" />
于 2013-10-01T09:12:30.287 回答