2013-12-17 23 views
11

W mojej aplikacji C# WinForms mam główne okno, które ma ukryte domyślne elementy sterujące.Przeniesienie okna bez obramowania w wpf

Więc pozwól mi przenieść go wokół I dodaje następujące do głównego okna:

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; 
    } 

Mam WPF aplikacji gdzie mam również ukryte kontrole domyślne i chcę zrobić to samo. Widzę, że główne okno pochodzi z "okna", więc powyższy kod nie działa. Jak to zrobić w WPF?

Odpowiedz

22

Do tego będziesz chciał dołączyć obsługi zdarzeń do zdarzenia MouseDown okna sprawdź, czy lewy przycisk myszy został naciśnięty i wywołać metodę DragMove w oknie zrobić.

Oto przykład okna z tej funkcjonalności:

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(); 
    } 
} 
+0

Korzystanie powoduje moje etykiety, które są wywoływane przez mouseUp lub PreviewMouseUp aby nie dostać sygnalizowane. –

+0

@TheMuffinMan Chciałbym wypróbować albo użycie MouseUp dla twoich etykiet, jeśli możesz, albo używając przycisków oznaczonych jako etykiety i za pomocą zdarzenia kliknięcia. – Phaeze

0

Jak powiedziałem w innym temacie, w mojej walce tworząc okno niestandardowe w WPF znalazłem metodę trochę online, które zajmuje się Win32 API do Resize okno, JustinM kod jest prawo, jeśli chcesz przeciągnąć okno.

Kod jest dosyć obszerny. Zajmuje się kursorem, wiadomościami do WndProc i wszystkich. Wyjeżdżam z linkiem, który to wyjaśnia.

WPF Borderless window resize

Powiązane problemy