我有一个颜色的 listBox ,我想获得示例的选定颜色字符串:红色,黄色。
问题是当我得到 selectedItem 时,我需要将其转换为System.Windows.Media.Color
以获取名称并将其放入string
以在其他情况下使用它。
这是我使用的代码,不幸的是我总是得到这个异常
Specified cast is not valid
。
System.Windows.Media.Color colo =(System.Windows.Media.Color)listColor.SelectedItem;
任何帮助都会非常感激
答案 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
设置将在列表中显示的对象属性。
另外,您应该看一下这篇文章,看看SelectedValuePath
和SelectedValue
之间的区别:Difference between SelectedItem, SelectedValue and SelectedValuePath
答案 4 :(得分:0)
试试这个 - >
Color ChosenColor;
string SelectedColor= (string)listColor.SelectedItem;;
ChosenColor=(Color)ColorConverter.ConvertFromString(SelectedColor);