WPF Popup 控件很好,但在我看来有些局限。有没有办法在弹出窗口打开时“拖动”弹出窗口(就像使用 Windows 的 DragMove() 方法一样)?
这可以在没有大问题的情况下完成吗,还是我必须自己编写一个弹出类的替代品? 谢谢
最佳答案
这是一个使用 Thumb 的简单解决方案。
- XAML 和代码隐藏中的 Popup 子类
- 添加一个宽度/高度设置为 0 的 Thumb(这也可以在 XAML 中完成)
- 在 Popup 上监听 MouseDown 事件并在 Thumb 上引发相同的事件
- 在 DragDelta 上移动弹出窗口
XAML:
<Popup x:Class="PopupTest.DraggablePopup" ...>
<Canvas x:Name="ContentCanvas">
</Canvas>
</Popup>
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;
};
}
}
关于c# - 拖动 WPF Popup 控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/222029/