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}}" />

しかし今、条件に応じてPhoneForegroundBrushorを返すコンバーターが必要です。PhoneDisabledBrush

2 つのパラメーターを渡すことはできません。また、Windows Phone では MultiBinding もサポートされていません。私はこれについて考えました:

<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 に答える