问题描述
我正在尝试将前景色绑定到WPF文本块。
按照MvvmCross文档的指示,视图模型中的属性是一种颜色:
private System.Drawing.Color _setValueColor;
public System.Drawing.Color SetValueColor
{
get { return _setValueColor == null ? System.Drawing.Color.Green : _setValueColor; }
set { SetProperty(ref _setValueColor,value); }
}
xaml文本块是
<TextBlock Grid.Column="3" Grid.Row="1" Margin="20"
Text="{Binding SetMessage}" Foreground="{Binding SetValueColor,Converter={StaticResource NativeColor}}">
</TextBlock>
我有一个引用该插件的资源字典resource.xaml文件。该插件以nu-get MvvmCross.Plugin.Color 7.1.2的形式安装
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:color="clr-namespace:MvvmCross.Plugin.Color;assembly=MvvmCross.Plugin.Color"
<color:MvxNativeColorValueConverter x:Key="NativeColor" />
</ResourceDictionary>
在视图上,我将资源添加到构造器中
public SimpleReadWriteView()
{
var resourceDict = new System.Windows.ResourceDictionary();
resourceDict.source = new Uri("Resource.xaml",UriKind.Relative);
Resources.MergedDictionaries.Add(resourceDict);
InitializeComponent();
}
运行时会引发强制转换错误:
InvalidCastException:无法转换类型的对象 'MvvmCross.Plugin.Color.MvxnativeColorValueConverter'键入 “ System.Windows.Data.IValueConverter”。
我还尝试通过继承MvxValueConverter来创建自己的转换器,并且遇到相同类型的转换错误,无法将转换器转换为System.Windows.Data.IValueConverter类型。
解决方法
请勿在WPF应用程序中使用System.Drawing.Color
,它是WinForms类型。请改用System.Windows.Media.Color
:
private System.Windows.Media.Color setValueColor = System.Windows.Media.Colors.Green;
public System.Windows.Media.Color SetValueColor
{
get { return setValueColor; }
set { SetProperty(ref setValueColor,value); }
}
您不需要绑定转换器。您可以改为直接绑定Color
的{{1}}属性:
SolidColorBrush
除此之外,从颜色到画笔的转换看起来像这样:
<TextBlock ... >
<TextBlock.Foreground>
<SolidColorBrush Color="{Binding SetValueColor}" />
</TextBlock.Foreground>
</TextBlock>