所以我有这个简单的属性,用转换器改变了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);
}
}
所以我想知道如何改变这种标签风格并改变尺寸,风格如粗体等。
答案 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。