当前位置 : 主页 > 手机开发 > 无线 >

WPF Thumb DragDelta跨监视器移动

来源:互联网 收集:自由互联 发布时间:2021-06-10
我有一个Popup控件,我添加了一个拇指,所以我可以在屏幕上拖动它.拇指的DragDelta事件因此重载: private static void Thumb_DragDelta(object sender, DragDeltaEventArgs e) { Thumb thumb = (Thumb)sender; Popup popu
我有一个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

弹出窗口移动到另一个监视器时会产生奇怪的频闪效果;我需要做些什么才能让它在监视器之间平滑过渡?

我仍然没有弄清楚如何将弹出窗口解除绑定到屏幕,但我能够通过使用Window控件来完成我需要的操作.我创建了WindowStyle.None,因此没有边框,并使用DragMove()方法的委托重载了MouseLeftButtonDown事件,因此可以在屏幕上拖动它们.这让我的弹出窗口具有非常相似的外观和感觉,但能够在屏幕上拖动它而没有闪烁.
网友评论