将WPF Combobox的SelectedItem转换为Color会导致异常

时间:2010-04-15 10:51:45

标签: c# wpf combobox casting selecteditem

我有一个可用的系统颜色的组合框数据绑定。当用户选择颜色时,会触发以下代码:

private void cboFontColour_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    Color colour = (Color)(cboFontColour.SelectedItem);
}

这会抛出一个Casting Exception,并显示以下消息:“指定的强制转换无效。”当我将鼠标悬停在调试器中的cboFontColour.SelectedItem上时,它始终是一个Color对象。

我不明白为什么系统似乎无法从Color转换为Color,任何帮助都会有很大的帮助。

4 个答案:

答案 0 :(得分:0)

您应始终使用isas代替直接类型转换。 另外,请确保Color实际上与您在调试器中看到的类型相同。

答案 1 :(得分:0)

您是如何设置绑定到可用系统颜色的?如果您正在使用SystemColors类的静态属性,那么请注意,尽管该类的名称,并非所有这些条目都是Color对象(但也是SolidColorBrushes和ResourceKeys)。你总是可以做一个

    MessageBox.Show(cboFontColour.SelectedItem.GetType().ToString());
    // or
    MessageBox.Show(cboFontColour.SelectedValue.GetType().ToString());

检查类型。

答案 2 :(得分:0)

啊,啊,终于解决了。实际返回的函数是DependancyProperty而不是Color。不知道我错过了这么久

答案 3 :(得分:0)

我遇到了同样的问题,这个问题没有提出任何建议。在尝试转换为(Color)时我一直遇到异常,如果我尝试使用'Color?',代码甚至都不会编译?或'作为'。最后提出了以下解决方法。它并不理想,因为我现在必须创建一个新对象,但至少它可以工作:

string colorName = _comboBox.SelectedValue.ToString();
Color color = (Color)ColorConverter.ConvertFromString(colorName);