4

TextBlock テキスト値によって TextBlock の前景プロパティを設定することは可能ですか? 例: テキスト値は Mike、フォアグラウンド プロパティは Black、値は Tim、プロパティ値は green などです。Google で検索しましたが、解決策が見つかりません。

4

3 に答える 3

6

テキストを色に動的にマップするなど、スマートな処理を行う柔軟性が必要な場合は、Converter クラスを使用できます。テキストが何かにバインドするように設定されていると仮定しています。フォアグラウンドで同じものにバインドできますが、カスタムコンバーターを使用できます。

<TextBlock Text="{Binding Path=Foo}" 
           Foreground="{Binding Path=Foo, Converter={StaticResource myConverter}" />

コンバーターは次のように定義されます。

public class ColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        string text = (string)value;
        switch (text)
        {
            case "Mike":
                return Colors.Red;
            case "John":
                return Colors.Blue;
            default:
                return Colors.Black;
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return null;
    }
}

明らかに、単純な switch ステートメントの代わりに、新しい値などを処理するためのよりスマートなロジックを使用できます。

于 2010-11-04T18:24:29.903 に答える
3

Text をプロパティとして、前景色をプロパティとして持つモデル ビュー (INotifyPropertyChanged を実装) があり、テキスト ブロックでこれら 2 つのプロパティをモデル ビューにバインドします。color プロパティは text プロパティに依存する場合があります。

于 2010-11-04T18:20:15.660 に答える