【问题标题】:Casting SelectedItem of WPF Combobox to Color causes exception将 WPF Combobox 的 SelectedItem 转换为 Color 会导致异常
【发布时间】:2010-04-15 10:51:44
【问题描述】:

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

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

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

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

【问题讨论】:

  • 是同一个命名空间吗?也就是说,其中一个是Something.Color,另一个是SomethingElse.Etc.Color?
  • 是的,它们都在同一个命名空间中。两者都是 System.Windows.Media.Color
  • 能否给我们用于创建 ComboBox 的 XAML?!

标签: c# wpf combobox casting selecteditem


【解决方案1】:

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

【讨论】:

  • 我试过了,但是我得到一个编译错误:错误 8 as 运算符必须与引用类型或可为空的类型一起使用('System.Windows.Media.Color' 是一个不可为空的值类型)
  • @Nick Udell,你可以做Color? colour = cboFontColour.SelectedItem as Color?;,然后检查它是否为空。阅读更多关于 isas 等的其他完整主题。
  • 只是好奇:如果颜色值不是颜色,你如何获得颜色值?!
【解决方案2】:

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

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

检查类型。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-10
        • 1970-01-01
        • 2012-06-19
        • 2011-01-03
        • 1970-01-01
        • 2010-12-08
        • 2011-11-01
        • 2017-02-20
        相关资源
        最近更新 更多