我有一个Popup控件,我添加了一个拇指,所以我可以在屏幕上拖动它.拇指的DragDelta事件因此重载: private static void Thumb_DragDelta(object sender, DragDeltaEventArgs e) { Thumb thumb = (Thumb)sender; Popup popu
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事件,因此可以在屏幕上拖动它们.这让我的弹出窗口具有非常相似的外观和感觉,但能够在屏幕上拖动它而没有闪烁.