我有一个可用的系统颜色的组合框数据绑定。当用户选择颜色时,会触发以下代码:
private void cboFontColour_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
Color colour = (Color)(cboFontColour.SelectedItem);
}
这会抛出一个Casting Exception,并显示以下消息:“指定的强制转换无效。”当我将鼠标悬停在调试器中的cboFontColour.SelectedItem上时,它始终是一个Color对象。
我不明白为什么系统似乎无法从Color转换为Color,任何帮助都会有很大的帮助。
答案 0 :(得分:0)
您应始终使用is
和as
代替直接类型转换。
另外,请确保Color实际上与您在调试器中看到的类型相同。
答案 1 :(得分:0)
您是如何设置绑定到可用系统颜色的?如果您正在使用SystemColors
类的静态属性,那么请注意,尽管该类的名称,并非所有这些条目都是Color对象(但也是SolidColorBrushes和ResourceKeys)。你总是可以做一个
MessageBox.Show(cboFontColour.SelectedItem.GetType().ToString());
// or
MessageBox.Show(cboFontColour.SelectedValue.GetType().ToString());
检查类型。
答案 2 :(得分:0)
答案 3 :(得分:0)
我遇到了同样的问题,这个问题没有提出任何建议。在尝试转换为(Color)时我一直遇到异常,如果我尝试使用'Color?',代码甚至都不会编译?或'作为'。最后提出了以下解决方法。它并不理想,因为我现在必须创建一个新对象,但至少它可以工作:
string colorName = _comboBox.SelectedValue.ToString();
Color color = (Color)ColorConverter.ConvertFromString(colorName);