2016-01-03 50 views
5

私はWindowStyle=Noneを使用してWPFウィンドウの枠線を削除しています。 MainWindow.xaml.csで私は、コンストラクタに次の行を追加したファイル:枠なしのドラッグ可能なWPFウィンドウ

this.MouseLeftButtonDown += delegate { this.DragMove(); }; 

これは多少動作し、私がいる限り、それはいずれにもないとして、メインウィンドウ内を左クリックしどこ私は周りにウィンドウをドラッグすることができますコントロール。それが問題になる場所ですから。私は、ウィンドウ内のすべてのスペースを占めるテキストボックスを持っています。私がこれを行うとすぐに、テキストボックス内をクリックしたままにウィンドウを移動することはできません。

ユーザがどのようなコントロールを行っていても、ウィンドウ内をクリックしてマウスをドラッグすると、ウィンドウを移動させるにはどうすればよいですか?

また、ユーザーがクリックしてテキストボックスコントロール内をドラッグしたときにウィンドウを移動させるにはどうすればよいですか?

答えて

3

トンネルされたMouseDownイベント、つまりWindowのPreviewMouseLeftButtonDownイベントを使用します。

this.PreviewMouseLeftButtonDown += (s, e) => DragMove(); 

あなたはまた、手動でテキストボックスにイベントを追加することができます:

textBox.MouseDown += (s, e) => DragMove(); 

しかしを:

これは、イベントがウィンドウとその子コントロールの両方を発生することを保証します

あなたがしたいことをすることには、その固有の問題があります。 TextBoxでテキストを選択することはできません。回避策があります:

bool isKeyPressed = false; 

public MainWindow() 
{ 
    InitializeComponent(); 
    this.PreviewKeyDown += (s1, e1) => { if (e1.Key == Key.LeftCtrl) isKeyPressed = true; }; 
    this.PreviewKeyUp += (s2, e2) => { if (e2.Key == Key.LeftCtrl) isKeyPressed = false; }; 
    this.PreviewMouseLeftButtonDown += (s, e) => { if (isKeyPressed) DragMove(); }; 
} 
+0

私はこのソリューションが気に入っていますが、あなたはウィンドウを動かすためにCtrlを押したままにしています。それは私には分かりやすい。 –

関連する問題