0

我有一个颜色列表框,我想获取选定的颜色字符串,例如: Red,yellow

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

Specified cast is not valid.

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

任何帮助将不胜感激

4

5 回答 5

3

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

string colorName = (string) listColor.SelectedItem;
Color colorValue = ColorConverter.ConvertFromString(colorName);
于 2013-07-30T11:34:25.710 回答
1

改用SelectedValue

System.Windows.Media.Color color = (System.Windows.Media.Color)listColor.SelectedValue;
于 2013-07-30T11:21:55.273 回答
1

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

于 2013-07-30T12:20:25.010 回答
0

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

所以如果你添加string,你会回来string。如果你添加Color,你会回来Color

在您的情况下,您似乎添加了string. 当然,您不能直接将字符串转换为颜色,因此您应该将对象添加Color到列表中,或者您应该解析获得的字符串SelectedValue以获得Color.

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

您还应该看看这篇文章以了解SelectedValue和之间的区别SelectedItemSelectedItem、SelectedValue 和 SelectedValuePath 之间的区别

于 2013-07-30T11:31:15.587 回答
0

试试这个->

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

          ChosenColor=(Color)ColorConverter.ConvertFromString(SelectedColor);
于 2013-07-30T12:00:32.180 回答