2013-07-30 64 views
0

我有一个listBox的颜色,我想要获取所选颜色字符串示例:红色,黄色如何在列表框中添加selecteditem

问题是,当我得到的将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有一个colorBox的列表框是不真实的,这里的原因很混乱。那个列表框里面是什么? –

回答

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

这显然是OP有一个充满字符串的列表框。 –

0

当您将项目添加到您的列表框,你实际上添加Object秒。这意味着您在每个列表项中看到的文字是您添加的对象.ToString()

所以,如果你添加string,你会得到回string。如果您添加Color,则会返回Color

在你的情况,你似乎添加string。当然,您不能直接使用颜色来投射字符串,因此您应该将对象Color添加到您的列表中,或者您应该使用SelectedValue解析字符串来获得Color

如果要直接添加对象Color,还可以使用属性SelectedValuePath来设置将显示在列表中的对象的属性。你

同时也应该看看这个帖子,看看SelectedValueSelectedItem之间的区别:Difference between SelectedItem, SelectedValue and SelectedValuePath

0

尝试这个 - >

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

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

固定它

块引用 颜色colorValue =(彩色)(( System.Reflection.PropertyInfo)listColor.SelectedValue).GetValue(listColor,null);

+0

这是唯一可行的解​​决方案 - 从Color到Color(在相同的命名空间中)是一个可笑的飞跃, – T4NK3R