如何在列表框中投射选定的项目

时间:2013-07-30 11:20:10

标签: c# wpf

我有一个颜色的 listBox ,我想获得示例的选定颜色字符串:红色,黄色

问题是当我得到 selectedItem 时,我需要将其转换为System.Windows.Media.Color以获取名称并将其放入string以在其他情况下使用它。 这是我使用的代码,不幸的是我总是得到这个异常

Specified cast is not valid

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

任何帮助都会非常感激

5 个答案:

答案 0 :(得分:3)

在XAML中,字符串很容易转换为颜色,您很难意识到它们是非常不同的类型。在C#中,您必须明确地转换它。幸运的是,有一个内置类可以做到这一点:

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

答案 1 :(得分:1)

改为使用 SelectedValue

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

答案 2 :(得分:1)

修复它
  

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

答案 3 :(得分:0)

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

因此,如果您要添加string,则会返回string。如果您要添加Color,则会返回Color

在您的情况下,您似乎添加了string。当然你不能直接用颜色转换字符串,所以你应该将对象Color添加到列表中,或者你应该用SelectedValue解析得到的字符串{{1} }}

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

另外,您应该看一下这篇文章,看看SelectedValuePathSelectedValue之间的区别:Difference between SelectedItem, SelectedValue and SelectedValuePath

答案 4 :(得分:0)

试试这个 - >

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

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