【问题标题】:WPF combo box seems to cause InvalidCastExceptionWPF 组合框似乎导致 InvalidCastException
【发布时间】:2019-01-20 16:30:33
【问题描述】:

摘自Reference Source:

private void CloneLayoutUpdated(object sender, EventArgs e)
{
    Rectangle rect = (Rectangle)SelectionBoxItem;
    rect.Width = _clonedElement.RenderSize.Width;
    rect.Height = _clonedElement.RenderSize.Height;

    VisualBrush visualBrush = (VisualBrush)rect.Fill; // (x)
    visualBrush.Viewbox = new Rect(_clonedElement.RenderSize);
    visualBrush.Viewport = new Rect(_clonedElement.RenderSize);
}

我会声称第 (x) 行有问题,因为 rect.Fill 可能指的是 SolidColorBrush。

有人(简单?)Xaml / C# 代码抛出异常?

【问题讨论】:

  • 无法理解这个问题。这段代码不适合你吗?你得到什么例外?您能否在问题中添加详细信息。
  • 显然,rect.Brish 不是VisualBrush。
  • @ManojChoudhari:如果 rect.Fill 是 SolidColorBrush,并且您尝试将其转换为 VisualBrush,您将得到 InvalidCastException。

标签: c# .net wpf xaml combobox


【解决方案1】:

SelectionBoxItem 是一个只读依赖属性。其实际值的创建是在ComboBox 类内部处理的,它的任何值都不能来自外部。如果您检查上面的UpdateSelectionBoxItem 方法,您将看到只有当SelectionBoxItem 设置为具有VisualBrush 的Rectangle 时,才会注册有问题的处理程序,因为它是Fill。因此,这些转换是“安全的”,当调用事件处理程序时,rect.Fill 永远不会引用 VisualBrush 以外的任何内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多