在wpf中移动无边框窗口

Har*_*Boy 11 c# wpf xaml

在我的C#WinForms应用程序中,我有一个隐藏其默认控件的主窗口.

所以为了让我能够移动它,我将以下内容添加到主窗口:

    private const int WM_NCHITTEST = 0x84;
    private const int HTCLIENT = 0x1;
    private const int HTCAPTION = 0x2;
    private const int WM_NCLBUTTONDBLCLK = 0x00A3;

    protected override void WndProc(ref Message message)
    {
        if (message.Msg == WM_NCLBUTTONDBLCLK)
        {
            message.Result = IntPtr.Zero;
            return;
        }

        base.WndProc(ref message);

        //Allow window to move
        if (message.Msg == WM_NCHITTEST && (int)message.Result == HTCLIENT)
            message.Result = (IntPtr)HTCAPTION;
    }
Run Code Online (Sandbox Code Playgroud)

我有一个WPF应用程序,我也隐藏了默认控件,我想做同样的事情.我看到主窗口是从'Window'派生的,所以上面的代码不起作用.我如何在WPF中执行此操作?

Jus*_*ica 25

要执行此操作,您需要将事件处理程序附加到MouseDown窗口事件,检查是否按下了鼠标左键并DragMove在窗口上调用该方法.

以下是具有此功能的窗口示例:

public partial class MyWindow : Window
{
    public MyWindow()
    {
        InitializeComponent();
        MouseDown += Window_MouseDown;
    }

    private void Window_MouseDown(object sender, MouseButtonEventArgs e)
    {
        if (e.ChangedButton == MouseButton.Left)
            DragMove();
    }
}
Run Code Online (Sandbox Code Playgroud)