2013-12-17 22 views
11

私のC#WinFormsアプリケーションには、デフォルトのコントロールが隠されたメインウィンドウがあります。だから、私はそれを周りに移動できるようにするwpfでフチ無しウィンドウを移動

私は、メインウィンドウに以下を追加:

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アプリケーションを持っています。メインウィンドウは 'Window'から派生しているので、上記のコードは機能しません。 WPFでこれを行うにはどうすればいいですか?

答えて

22

これを行うには、ウィンドウの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(); 
    } 
} 
+0

。 –

+0

@TheMuffinMan私はあなたのラベルにMouseUpを使用するか、またはラベルとしてスタイル設定されたボタンを使用してクリックイベントを使用するかのいずれかを試みます。 – Phaeze

0

私はWPFでカスタムウィンドウを作成し、私の闘争では、あなたの他のトピックに言ったように私はWin32 APIのを扱ういくつかの方法をオンラインで見つけResizeにウィンドウをドラッグすると、JustinMコードが正しく表示されます。

コードは多少広範囲です。それはカーソル、メッセージをWndProcとすべてに対処します。私はそれを説明するリンクを残します。これはもはや合図取得するためにMouseUpイベントやPreviewMouseUp経由で起動されている私のラベルを起こし使用

WPF Borderless window resize

関連する問題