通过后面的代码更改标签样式

时间:2016-01-04 16:18:47

标签: wpf label

所以我有这个简单的属性,用转换器改变了text color

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (targetType == typeof(String))
        {
            if (value.ToString().StartsWith("Start"))
            {
                // Split the string.
                string[] arr = value.ToString().Split(' ');

                // Add color attribute into value field.
                string coloredVal = string.Format("<Span Foreground=\"Yellow\">{0}</Span>", arr[3]);
                return string.Format("bla bla in {0} sec", coloredVal);
            }
        }

所以我想知道如何改变这种标签风格并改变尺寸,风格如粗体等。

1 个答案:

答案 0 :(得分:0)

XAML不是HTML;在那里填充一些标记文本不会导致标记文本被解析和呈现。顺便说一下,WPF中的<Span>不会进入Label,而是TextBlock。但TextBlock可以是Label内容,所以这不是什么大问题。

你在使用值转换器的正确轨道上,但这不是在这种情况下抛出一个的正确方法。您要做的是有条件地将Style应用于TextBlock,并使用值转换器检查前缀。这是一种方法。

XAML:

<Label
    Content="{Binding MyTextProperty}">
    <Label.Style>
        <Style 
            TargetType="Label" 
            >
            <Style.Resources>
                <local:HasPrefixValueConverter x:Key="HasPrefix" />
            </Style.Resources>
            <Style.Triggers>
                <DataTrigger 
                    Binding="{Binding MyTextProperty, Converter={StaticResource HasPrefix}, ConverterParameter='Start'}" 
                    Value="True">
                    <Setter Property="Foreground" Value="Yellow" />
                    <Setter Property="FontWeight" Value="Bold" />
                    <Setter Property="Background" Value="DarkGreen" />
                    <!-- Etc. -->
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Label.Style>
</Label>

C#:

public class HasPrefixValueConverter : IValueConverter
{
    public object Convert(object value, 
        Type targetType, object parameter, 
        System.Globalization.CultureInfo culture)
    {
        if (value is String && parameter is String)
        {
            return (value as String).StartsWith(parameter as String);
        }

        return false;
    }

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

如果你想让一些文本动态的格式与TextBlock中的其他文本格式不同,那就完全不同了。有很多方法可以实现这一目标,但它们的范围为from ugly to gruesome