我在Windows Universal Application中定义了一个自定义Color
类。我想使用ViewModel
将ViewModel.ModelColor
(ValueConverter
)中此类型的属性绑定到ColorPicker。不幸的是,它不起作用。这就是我所拥有的:
XAML
<ColorPicker Color="{Binding ModelColor, Converter={StaticResource ColorConverter}, Mode=TwoWay}" />
转换器
public class ColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
if (value == null)
{
return default(Color);
}
var c = (Color) value;
return Windows.UI.Color.FromArgb(c.A, c.R, c.G, c.B);
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
var c = (Windows.UI.Color) value;
return new Color(c.A, c.R, c.G, c.B);
}
}
当我运行它时,它会抛出一行:
var c = (Windows.UI.Color) value;
这是一个例外:
发生了什么?我应该在Windows.UI.Color
中收到value
!
编辑:我已经检查了&#34; value.GetType()&#34;这就是我得到的。太奇怪了!
答案 0 :(得分:0)
以下是我如何使用它:
public Color SelectedColor
{
get { return ColorFromText(SelectedColorAsText); }
set
{
String newColorAsText;
newColorAsText = TextFromColor(value);
if (newColorAsText != SelectedColorAsText)
{
SelectedColorAsText = newColorAsText;
OnPropertyChanged(nameof(SelectedColor));
}
}
}
public String SelectedColorAsText { get; set; }
private Color ColorFromText(String text)
{
Byte a, r, g, b;
a = Byte.Parse(text.Substring(1, 2), System.Globalization.NumberStyles.AllowHexSpecifier);
r = Byte.Parse(text.Substring(3, 2), System.Globalization.NumberStyles.AllowHexSpecifier);
g = Byte.Parse(text.Substring(5, 2), System.Globalization.NumberStyles.AllowHexSpecifier);
b = Byte.Parse(text.Substring(7, 2), System.Globalization.NumberStyles.AllowHexSpecifier);
return Color.FromArgb(a, r, g, b);
}
private String TextFromColor(Color color)
{
return color.ToString();
}
(我选择任意将我的内部表示设为"#AARRGGBB"
。)
然后,在XAML中,使用ColorPicker
绑定Color
的{{1}}属性:
{x:Bind}
如果您使用Color="{x:Bind Path=SelectedColor, Mode=TwoWay}"
,您将收到关于{Binding}
无法转换为Exception
的精彩System.__ComObject
。