如何将ColorPicker.selectedColor转换为system.windows.media.color?

时间:2015-10-06 02:38:11

标签: c# wpf

ColorPicker _clpicker;
System.Windows.Media.Color c = _clpicker.SelectedColor;

错误:

  

无法隐式转换类型'System.Windows.Media.Color?'至   'System.Windows.Media.Color'。存在显式转换(是你   错过演员?)

1 个答案:

答案 0 :(得分:2)

如果没有更具体的信息,包括您正在使用的ColorPicker类型的详细信息(WPF中没有这样的内置类......可能是您使用的是众多第三方选项中的一个),这是不可能的要确定你的问题是什么。

但是根据错误消息,似乎SelectedColor属性被声明为Nullable<Color>(即Color?),当然正如错误所说,但没有隐式转换从Nullable<Color>Color,您可以使用强制转换明确转换:

System.Windows.Media.Color c = (System.Windows.Media.Color)_clpicker.SelectedColor;

或者,您可以使用Value属性:

System.Windows.Media.Color c = _clpicker.SelectedColor.Value;

同样,没有更多细节,我们不清楚为什么SelectedColor属性是可以为空的类型。虽然在您尝试此分配的时间点,但实际值可能是null。在这种情况下,编译器错误告诉您一些非常重要的事情:您没有采取任何措施处理null案例

如果SelectedColor属性的值为null,则上述两个选项都会抛出异常。

有多种方法可以处理null值,但最简单的方法是让Nullable<T>类型为您执行此操作:

System.Windows.Media.Color c = _clpicker.SelectedColor.GetValueOrDefault();

然后,如果SelectedColor属性的值为null,则c变量将被分配System.Windows.Media.Color的默认值(即黑色)。如果您愿意,可以将其他默认值传递给GetValueOrDefault()方法,如果原始值为null,则会返回该值。