3

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

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

这会引发带有以下消息的转换异常:“指定的转换无效。” 当我在调试器中将鼠标悬停在 cboFontColour.SelectedItem 上时,它始终是一个 Color 对象。

我不明白为什么系统似乎无法从颜色转换为颜色,任何帮助都会非常感激。

4

4 回答 4

0

您应该始终使用isandas而不是直接类型转换。此外,请确保 Color 实际上与您在调试器中看到的类型相同。

于 2010-04-15T10:58:29.827 回答
0

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

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

检查类型。

于 2010-04-15T11:14:27.970 回答
0

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

于 2010-05-15T12:15:58.423 回答
0

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

string colorName = _comboBox.SelectedValue.ToString();
Color color = (Color)ColorConverter.ConvertFromString(colorName);
于 2014-11-13T13:43:48.347 回答