2015-10-06 2 views
-3
ColorPicker _clpicker; 
System.Windows.Media.Color c = _clpicker.SelectedColor; 

Ошибка:Как преобразовать ColorPicker.selectedColor в system.windows.media.color?

Cannot implicitly convert type 'System.Windows.Media.Color?' to 'System.Windows.Media.Color'. An explicit conversion exists (are you missing a cast?)

+0

может быть [WPF ColorPicker от привязки wpf/xaml/toolkit к ошибке свойства] (http://stackoverflow.com/questions/14495581/wpf-colorpicker-from-wpf-xaml-toolkit-binding-to-property- ошибка) было бы полезно –

+0

См. знак вопроса в 'System.Windows.Media.Color?'. Похоже, вы имеете дело с [Nullable type] (https://msdn.microsoft.com/en-us/library/b3h38hb0 (v = vs.110) .aspx) здесь. – vesan

ответ

1

Без получения более подробной информации, включая информацию о ColorPicker типа вы используете (там нет такого встроенного класса в WPF & hellip; предположительно вы используете один из многих третьих -партийные варианты там), невозможно точно знать, в чем проблема.

Но, основываясь на сообщении об ошибке, оказывается, что свойство 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; 

Опять же, остроумие hout больше особенностей, непонятно, почему свойство 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.

+0

Большое спасибо –

+0

, если вы нашли ответ полезным, соглашение о переполнении стека - это щелкнуть по кнопке вверх по ответу. Если ответ действительно решил вашу проблему, соглашение о переполнении стека - это щелчок по кнопке галочки по ответу. Подробнее о том, как использовать переполнение стека, см. Http://stackoverflow.com/help/someone-answers. :) –