2013-12-17 16 views
11

Trong ứng dụng C# WinForms của tôi, tôi có một cửa sổ chính có các điều khiển mặc định ẩn.Di chuyển cửa sổ không viền trong wpf

Vì vậy, để cho phép tôi để di chuyển nó xung quanh tôi đã thêm dòng sau vào cửa sổ chính:

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

Tôi có một ứng dụng WPF nơi tôi cũng đã ẩn các điều khiển mặc định và tôi muốn làm như vậy. Tôi thấy rằng cửa sổ chính bắt nguồn từ một 'Cửa sổ' để mã trên không hoạt động. Làm cách nào để thực hiện điều này trong WPF?

Trả lời

22

Để thực hiện việc này, bạn sẽ muốn gắn trình xử lý sự kiện vào sự kiện MouseDown của cửa sổ, kiểm tra xem nút chuột trái đã được nhấn và gọi phương thức DragMove trên cửa sổ chưa.

Dưới đây là một mẫu của một cửa sổ với chức năng này:

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

Sử dụng điều này gây ra nhãn của tôi được gọi thông qua MouseUp hoặc PreviewMouseUp không còn được tín hiệu. –

+0

@TheMuffinMan Tôi sẽ thử sử dụng MouseUp cho các nhãn của bạn nếu bạn có thể hoặc sử dụng các nút được tạo kiểu như nhãn và sử dụng sự kiện nhấp chuột. – Phaeze

0

Như tôi đã nói trong chủ đề khác của bạn, trong cuộc đấu tranh của tôi tạo ra một cửa sổ tùy chỉnh trong WPF Tôi tìm thấy một số phương pháp trực tuyến mà giao dịch với các API Win32 đến Resize cửa sổ, mã JustinM là đúng nếu bạn muốn Kéo Cửa sổ.

Mã này rất phong phú. Nó đề cập đến con trỏ, thư đến WndProc và tất cả. Tôi sẽ để lại với một liên kết giải thích nó.

WPF Borderless window resize

Các vấn đề liên quan