Перемещение окна без полей в wpf

В моем приложении С# 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;
    }

У меня есть приложение WPF, где я также скрыл элементы управления по умолчанию, и я хочу сделать то же самое. Я вижу, что главное окно происходит от "окна", поэтому приведенный выше код не работает. Как это сделать в WPF?

Ответ 1

Чтобы сделать это, вы захотите присоединить обработчик событий к событию 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();
    }
}

Ответ 2

Как я уже сказал в своей другой теме, в моей борьбе с созданием пользовательского окна в WPF я нашел какой-то метод в Интернете, который имеет дело с API Win32 для Resize окна, JustinM-код прав, если вы хотите перетащить окно.

Код довольно обширен. Он обрабатывает курсор, сообщения WndProc и все. Я оставлю ссылку, которая объясняет это.

Изменение размера окна WPF