画面の端にスナップする WPF アプリがあります (画面の端から 20 ピクセル以内にいる場合は、ウィンドウの .Top または .Left を設定するだけです) が、最近、WPF SDK チームから提供されたコードを "ウィンドウクロムを混乱させ、うまく機能していますが(スクリーンショット)、「スナップショット」がウィンドウを予期せず移動させています(例:スナップする必要があるときに左にジャンプします)
私はそれをWM_NCCALCSIZEの処理に絞り込みました...彼らは基本的に何もせず、処理すると言って0を返すだけなので、これは本当に奇妙です。
WM_NCCALCSIZE のドキュメントによると、これはウィンドウ全体がクライアントとして扱われる (クライアント以外のエッジがない) だけの結果になるはずですが、どういうわけか、スナップ先のコードがウィンドウを画面の一番下に移動するたびに、 、それも約134ピクセル左に移動します...(他の端に移動すると同様の副作用があります)、マウスを押したままドラッグしている限り、本来あるべき場所から前後にちらつきます。WM_NCCALCSIZE の処理をコメントアウトすると、スナップ先が正常に機能します (ただし、フォームが正しく表示されません)。
WM_NCCALCSIZE ハンドラーでできることはすべて試しましたが、左にジャンプするのを止めることはできません...そしてもちろん、WM_NCCALCSIZE はウィンドウ サイズが変更されたときにのみ呼び出されるため、それがどのように発生するのかわかりませんそもそもこれ!
PSコードを実際に見たい場合は、すでにCodePlexにあり、2つのファイルで_HandleNCCalcSizeとOnWindowLocationChangedを探します