我可以检测到弹出位置变化吗?

时间:2012-12-13 03:43:15

标签: wpf c#-4.0 popup

使用wpf弹出窗口时遇到问题,即:

我怎么知道弹出窗口会改变它的位置?

例如:

我有一个弹出窗口,它的位置设置为底部,当我将窗口移动到一个角落时,位置更改为顶部,实际上它没有。我根据弹出的打开事件调试它。 所有我想知道我怎么知道它改变,所以我可以改变提示背景!感谢。

你可以在这里看到演示图片:

http://i.stack.imgur.com/lxOVl.jpg

http://i.stack.imgur.com/wWEAQ.jpg

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。在我的情况下,弹出窗口始终在窗口(而不是页面)上。 我通过注册Window事件解决了它:LocationChanged和SizeChanged:

        Window w = Window.GetWindow(this);
        if (w != null)
        {
            w.LocationChanged += windowLocationChanged;
            w.SizeChanged += windowLocationChanged;
        }

要将弹出窗口与窗口(或其中的控件)重新对齐,我使用以下技巧:

        if (!_popup.IsOpen)
            return;

        if (_popup.VerticalOffset == 0.1)
            _popup.VerticalOffset = 0;
        else
            _popup.VerticalOffset = 0.1;

设置VerticalOffset会触发弹出窗口的重新对齐,而小值会使其保持在像素边界内。