如何在XAML中的数据触发器中检查文本块文本值

时间:2017-07-19 10:55:39

标签: wpf xaml

如果值为xyz,我想检查文本块的文本值。我不想要任何操作,但如果文本值是'#FF84312F'我想将此文本设置为文本的前景色。 以下是我的代码。 我怎样才能做到这一点。请帮助我。

 <TextBlock Text="#FF84312F">
        <TextBlock.Style>
            <Style TargetType="TextBlock">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding  Path=Text, RelativeSource={RelativeSource Self}}" Value="*#">
                        <Setter Property="Foreground" Value="Red"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBlock.Style>
    </TextBlock>

3 个答案:

答案 0 :(得分:1)

试试这个:

<TextBlock Text="#FF84312F">
    <TextBlock.Style>
        <Style TargetType="TextBlock">
            <Setter Property="Foreground" Value="{Binding Text,RelativeSource={RelativeSource Self}}" />
        </Style>
    </TextBlock.Style>
</TextBlock>

或者这个:

<TextBlock Text="#FF84312F">
    <TextBlock.Style>
        <Style TargetType="TextBlock">
            <Style.Triggers>
                <Trigger Property="Text" Value="#FF84312F">
                    <Setter Property="Foreground" Value="{Binding Text,RelativeSource={RelativeSource Self}}" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>

它会将Foreground设置为Text属性指定的值,无条件或有条件(使用Trigger)。

答案 1 :(得分:1)

注意:

  

此答案基于answer provided by mm8

的评论

您可以使用转换器将字符串转换为SolidColorBrush

转换器类:

public class TextToSolidColorBrushConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var color = Brushes.Black;
        try
        {
            var converted = new BrushConverter().ConvertFromString(value?.ToString());
            color = converted != null ? (SolidColorBrush) converted : Brushes.Black;
        }
        catch (Exception e)
        {
            // ignored
        }
        return color;
    }

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

<强> XAML:

<Window.Resources>
    <local:TextToSolidColorBrushConverter x:Key="TextToSolidColorBrushConverter"/>
</Window.Resources>

<TextBlock Text="Any text">
    <TextBlock.Style>
        <Style TargetType="TextBlock">
            <Setter Property="Foreground" Value="{Binding Text,RelativeSource={RelativeSource Self}, Converter={StaticResource TextToSolidColorBrushConverter}}" />
        </Style>
     </TextBlock.Style>
</TextBlock>

答案 2 :(得分:0)

根据您的评论

  

我想要的是什么。我必须检查文本块文本和文本块文本   是颜色代码然后将该颜色代码分配给前景。那是

如果myFuncDef functionFactory(int n);文字值为Color代码,则Textblock Foreground Binded会更改Color default color shown <TextBlock Text="{Binding Text}" Foreground="{Binding Text, RelativeSource= {RelativeSource Self}}"/> <TextBlock Text="#0FFFFF" Foreground="{Binding Text, RelativeSource= {RelativeSource Self}}"/> {{1}} }}

{{1}}

{{1}}