私の質問は2つあり、どちらにも簡単な解決策があることを期待しています。WPFWPF のWinForms の標準ソリューション (私がこの説明を行う前に Christophe Geers が提供していたもの) ではなく。
まず、マウスのクリック + ドラッグ イベントをキャプチャして処理せずに、ウィンドウをドラッグ可能にする方法はありますか? つまり、ウィンドウはタイトル バーによってドラッグ可能ですが、ウィンドウにタイトル バーがないように設定し、それでもドラッグできるようにしたい場合、タイトル バーのドラッグを処理するものに何らかの方法でイベントをリダイレクトする方法はありますか?
次に、ウィンドウ内のすべての要素にイベント ハンドラーを適用する方法はありますか? つまり、ユーザーがどの要素をクリックしてドラッグしても、ウィンドウをドラッグ可能にします。もちろん、すべての要素にハンドラーを手動で追加する必要はありません。どこかで 1 回だけ実行すればよいのでしょうか?
ベストアンサー1
はい、次のMouseDown
イベントを適用しますWindow
private void Window_MouseDown(object sender, MouseButtonEventArgs e)
{
if (e.ChangedButton == MouseButton.Left)
this.DragMove();
}
e.Handled = true
これにより、MouseDown イベント ( )を消費するコントロールを除き、ユーザーは任意のコントロールをクリック/ドラッグするときにウィンドウをドラッグできるようになります。
PreviewMouseDown
の代わりにを使用することもできますMouseDown
が、ドラッグ イベントが を消費するClick
ため、ウィンドウはマウスの左クリック イベントに応答しなくなります。本当にどのコントロールからでもフォームをクリックしてドラッグできるようにしたい場合は、 を使用しPreviewMouseDown
、ドラッグ操作を開始するタイマーを開始し、X ミリ秒以内にイベントが発生した場合に操作をキャンセルすることができますMouseUp
。