c# - 拖动 WPF Popup 控件

标签 c# .net wpf xaml popup

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/

相关文章:

c# - 类型操作

c# - List<T>.IndexOf() 在 C# 中是如何实现的?

c# - TFS C# API : Workspace. PendAdd 静默失败

c# - 从 log4net 转发到 NLog

wpf - 样式 TargetType 在未附加到调试器时会导致 XamlParseException

c# - 我可以从 C# 追加到 MSSQL 数据库中的 BLOB 而不读取原始数据吗?

c# - WriteableBitmap 发生 OutOfMemoryException

c# - 基于参数抛出/不抛出异常 - 为什么这不是一个好主意?

c# - WPF 如何处理等待 Async/Await 响应的字段?

WPF:检测 Ctrl+MWheelUp/Down