WPF确定元素在屏幕上可见

时间:2014-12-09 10:08:12

标签: c# wpf

我使用Popup向用户显示验证消息。如果元素(例如文本框)滚出视图,则以下方法工作正常,我可以轻松隐藏弹出窗口。

Determine control is Visible

但是,如果我将窗口部分移出屏幕,那么我将无法再看到该元素,此方法仍然返回true。在这种情况下,弹出窗口仍然可以访问用户(弹出窗口始终保持在屏幕范围内)但元素不是。

如何在屏幕内检查元素是否可见?

1 个答案:

答案 0 :(得分:2)

这可以使用SystemParameters中提供的PrimaryScreenWidth和PrimaryScreenHeight来完成。您需要计算相对于屏幕的控件位置,并检查该点是否存在于屏幕边界中。

Point locationFromWindow = this.textBox.TransformToVisual(this).Transform(new Point(0, 0)); 
Point point = this.textBox.PointToScreen(new Point(0, 0));
Rect rect = new Rect(0, 0, SystemParameters.PrimaryScreenWidth, SystemParameters.PrimaryScreenHeight);
if (!rect.Contains(point))
{
    // Outside screen bounds.
}