WPF Popup控件很不错,但在我看来有些局限.有没有办法在打开时"拖动"弹出窗口(就像使用Windows的DragMove()方法一样)?
这可以在没有大问题的情况下完成,还是我必须自己编写弹出类的替代品?谢谢
PopUp没有DragMove.只是一个小小的工作,你可以添加很多改进.
在后面的代码中,添加此mousemove事件
pop.MouseMove += new MouseEventHandler(pop_MouseMove); void pop_MouseMove(object sender, MouseEventArgs e) { if (e.LeftButton == MouseButtonState.Pressed) { pop.PlacementRectangle = new Rect(new Point(e.GetPosition(this).X, e.GetPosition(this).Y),new Point(200,200)); } }
这是使用Thumb的简单解决方案.
XAML中的子类Popup和代码隐藏
添加一个宽度/高度设置为0的拇指(这也可以在XAML中完成)
在Popup上侦听MouseDown事件,并在Thumb上引发相同的事件
在DragDelta上移动弹出窗口
XAML:
C#:
public partial class DraggablePopup : Popup { public DraggablePopup() { var thumb = new Thumb { Width = 0, Height = 0, }; ContentCanvas.Children.Add(thumb); MouseDown += (sender, e) => { thumb.RaiseEvent(e); }; thumb.DragDelta += (sender, e) => { HorizontalOffset += e.HorizontalChange; VerticalOffset += e.VerticalChange; }; } }