Wpf 通过代码隐藏更改标签样式
因此,我有一个简单的属性,它通过转换器更改了Wpf 通过代码隐藏更改标签样式,wpf,label,Wpf,Label,因此,我有一个简单的属性,它通过转换器更改了文本颜色: public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (targetType == typeof(String)) { if (value.ToString().StartsWith("St
文本颜色
:
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);
}
}
公共对象转换(对象值、类型targetType、对象参数、System.Globalization.CultureInfo区域性)
{
if(targetType==typeof(String))
{
if(value.ToString().StartsWith(“Start”))
{
//分开绳子。
字符串[]arr=value.ToString().Split(“”);
//将颜色属性添加到值字段中。
string coloredVal=string.Format(“{0}”,arr[3]);
返回string.Format(“bla bla in{0}秒”,coloredVal);
}
}
因此,我想知道如何更改此标签样式和更改大小、粗体等样式。XAML不是HTML;在其中填充一些标记文本不会导致标记文本被解析和呈现。顺便说一句,WPF中的
不在标签中,而是在文本块中。但是文本块可以de>标签
内容,所以这没什么大不了的
您使用值转换器的方法是正确的,但在这种特殊情况下,这不是正确的方法。您要做的是有条件地将样式
应用于文本块
,并使用值转换器检查前缀。下面是一种方法
XAML:
如果您想让文本块中的某些文本位以不同于其他文本位的方式进行动态格式化,这是另外一个问题。有很多方法可以做到这一点,但它们的范围很广。我很好奇,为什么要使用转换器来更改文本颜色?您可以在XAML中进行简单绑定,也可以在XAML中定义样式,然后将其应用到b后面的代码中y使用TryFindResource。我很想看到这种方法的一个例子,我没有想过
<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>
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();
}
}