在WPF中,Visual.PointFromScreen在什么情况下抛出InvalidOperationException?

Dan*_*ker 15 wpf .net-3.5

假设我想这样做,所以我可以找到鼠标相对于a的当前位置Visual,而无需访问特定的鼠标事件:

public static Point GetMousePosition(this Visual relativeTo)
{
    return relativeTo.PointFromScreen(GetMousePositionOnScreen());
}
Run Code Online (Sandbox Code Playgroud)

有时(通常当我刚刚在两个选项卡控件之间切换时)PointFromScreen会抛出一条InvalidOperationException消息:此Visual未连接到PresentationSource.

在查看可用的属性时,Visual我看不到与a有关的任何内容PresentationSource.

给定a Visual,当我调用PointFromScreen它时,如何判断它是否会抛出该异常?

Chr*_*isF 24

有一种静态方法PresentationSource.FromVisual:

返回提供Visual的源.

我知道这不能解决根本问题,但您可以在调用之前检查Visual是否连接到PresentationSource PointFromScreen.它可以防止异常,但你需要做一些更多的调查,看看为什么它首先没有连接.


Dre*_*kes 5

我发现您可以IsVisible在致电之前进行测试PointFromScreen以防止InvalidOperationException.