【发布时间】:2015-12-18 15:34:18
【问题描述】:
我将一些属性绑定到我的TextBlock:
<TextBlock
Text="{Binding Status}"
Foreground="{Binding RealTimeStatus,Converter={my:RealTimeStatusToColorConverter}}"
/>
Status 是简单文本,RealTimeStatus 是 enum。对于每个 enum 值,我正在更改我的 TextBlock Foreground 颜色。
有时我的Status 消息包含数字。该消息根据enum 值获得适当的颜色,但我想知道是否可以更改此消息中数字的颜色,以便数字将获得与文本其余部分不同的颜色。
编辑。
XAML
<TextBlock my:TextBlockExt.XAMLText="{Binding Status, Converter={my:RealTimeStatusToColorConverter}}"/>
转换器:
public class RealTimeStatusToColorConverter : MarkupExtension, IValueConverter
{
// One way converter from enum RealTimeStatus to color.
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is RealTimeStatus && targetType == typeof(Brush))
{
switch ((RealTimeStatus)value)
{
case RealTimeStatus.Cancel:
case RealTimeStatus.Stopped:
return Brushes.Red;
case RealTimeStatus.Done:
return Brushes.White;
case RealTimeStatus.PacketDelay:
return Brushes.Salmon;
default:
break;
}
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
public RealTimeStatusToColorConverter()
{
}
// MarkupExtension implementation
public override object ProvideValue(IServiceProvider serviceProvider)
{
return this;
}
}
【问题讨论】:
-
这很复杂。一种方法是将您的状态消息分成多条消息,其中数字内容位于单独的视图模型属性中。但这太可怕了。更纯粹的 MVVM 方法是为
Status编写另一个ValueConverter,这将解析消息文本并动态创建具有适当属性的多个 XAMLRun实例。但这是相当多的工作。 -
听起来不错,我可以提供代码示例吗? (我是新开发者...)