4

我有一个 Popup 控件,我在其中添加了一个拇指,以便可以在屏幕上拖动它。拇指的 DragDelta 事件被重载:

private static void Thumb_DragDelta(object sender, DragDeltaEventArgs e)
    {
        Thumb thumb = (Thumb)sender;
        Popup popup = thumb.Tag as Popup;

        if (popup != null)
        {
            popup.HorizontalOffset += e.HorizontalChange;
            popup.VerticalOffset += e.VerticalChange;
        }
    }

拖动效果很好(我使用了这里的拖动示例:http: //www.codeproject.com/Articles/43636/WPF-A-search),除了当弹出窗口到达监视器的末端并跨越到其他(双显示器设置)。例如,如果我在左侧显示器上打开弹出窗口并开始向右拖动它,当它的右边框接触显示器的边缘时,它的移动是不稳定的并开始四处移动,直到我进一步向右移动并显示在另一个监视器。

我通过这个场景进行了调试,这是一个基本上发生了什么的数字示例:

At edge of screen:
HorizontalOffset = 600
HorizontalChange = 1

Move Right:
HorizontalOffset = 601
HorizontalChange = -800

HorizontalOffset = -199
HorizontalChange = 401

HorizontalOffset = 200
HorizontalChange = -150

当它移动到另一台显示器时,这会产生这种奇怪的频闪效果;我需要做些什么来让它在显示器之间平稳过渡吗?

4

1 回答 1

2

我还没有弄清楚如何将弹出窗口取消绑定到屏幕,但我能够通过使用 Window 控件来完成我需要的操作。我这样做了WindowStyle.None,所以没有边框,并MouseLeftButtonDown用方法的委托重载了事件,DragMove()以便可以在屏幕上拖动它们。这让我拥有与弹出窗口非常相似的外观和感觉,但能够在屏幕上拖动它而不会闪烁。

于 2012-08-02T13:41:04.017 回答