2013-07-30 4 views
0

У меня есть listBox цвета, и я хочу получить выбранный цвет Строка для пример: красный, желтый.Как сделать выбранный элемент в списке

Проблема заключается в том, когда я получаю SelectedItem мне нужно, чтобы бросить его в System.Windows.Media.Color, чтобы получить имя и поместить его в string использовать его в другом случае. Вот код, который я использовал, К сожалению, я всегда получаю это исключение

Specified cast is not valid.

System.Windows.Media.Color colo = (System.Windows.Media.Color) listColor.SelectedItem;

Любая помощь будет оценена так

+2

Что делает 'listColor.SelectedItem == null? "": listColor.SelectedItem.GetType(). FullName' оценивает? –

+4

показать код, который вы используете для заполнения списка –

+3

_i have listBox color_ не является истиной и причиной много путаницы здесь. Что внутри этого списка? –

ответ

3

В XAML строка так легко преобразуется в цвет, который вы вряд ли понимают, что они очень разные типы. В C# вам нужно будет его явно преобразовать. К счастью, есть встроенный класс, который может сделать это:

string colorName = (string) listColor.SelectedItem; 
Color colorValue = ColorConverter.ConvertFromString(colorName); 
1

Используйте SelectedValue вместо:

System.Windows.Media.Color color = (System.Windows.Media.Color)listColor.SelectedValue; 
+0

У меня такое же исключение –

+1

@moez Вы уверены, что в вашем ListBox хранятся System.Windows.Media.Colors? –

+2

Очевидно, что у ОП есть список, полный строк. –

0

При добавлении элементов в ListBox, вы на самом деле добавить Object с. Это означает, что то, что вы видите как текст в каждом элементе списка, - это объект, который вы добавили .ToString().

Итак, если вы добавляете string, вы вернетесь string. Если вы добавляете Color, вы вернетесь Color.

В вашем случае, вы, кажется, добавили string. Конечно, вы не можете нарисовать строку непосредственно в цвете, так что либо вы должны добавить объект Color в свой список, либо вы должны разобрать строку, которую вы получаете с SelectedValue, чтобы получить Color.

Если вы хотите добавить непосредственно объект Color, вы также можете использовать свойство SelectedValuePath, чтобы установить свойство вашего объекта, которое будет отображаться в списке.

Кроме того, вы должны смотреть на этот пост, чтобы увидеть разницу между SelectedValue и SelectedItem: Difference between SelectedItem, SelectedValue and SelectedValuePath

0

Попробуйте this->

  Color ChosenColor; 
      string SelectedColor= (string)listColor.SelectedItem;; 

      ChosenColor=(Color)ColorConverter.ConvertFromString(SelectedColor); 
1

установил его с

Blockquote Цвет colorValue = (цвет) ((System.Reflection.PropertyInfo) listColor.SelectedValue) .GetValue (listColor, null);

+0

Это единственное исправление, которое работает. Это смешной прыжок, чтобы перейти от цвета к цвету (в том же пространстве имен) – T4NK3R

Смежные вопросы