WPF组合框似乎导致InvalidCastException

时间:2019-01-20 16:30:33

标签: c# .net wpf xaml combobox

摘录自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);
}

由于rect.Fill可能指向SolidColorBrush,因此我认为第(x)行有错误。

有人(简单吗?)Xaml / C#代码引发异常?

1 个答案:

答案 0 :(得分:1)

SelectionBoxItem是只读依赖项属性。其实际值的创建是在ComboBox类内部进行的,并且它的任何值都不能从外部传入。如果您检查上面的UpdateSelectionBoxItem方法,您将看到只有在将SelectionBoxItem设置为Rectangle且为{{ 1}}。因此,这些强制转换是“安全的”,rect.Fill在调用该事件处理程序时将永远不会引用VisualBrush以外的任何东西。