2017年4月25日火曜日

WPF Popupでお困りの皆様へ

https://social.msdn.microsoft.com/Forums/vstudio/en-US/f0502813-9c4f-4b45-bab8-91f98971e407/popup-popupstaysopen-togglebutton-and-data-binding-helpful-tip?forum=wpf

WPFでPopupは非常に扱いづらい。

Popup は StaysOpen=true にしておくとフォーム外をクリックしても閉じてくれないし、フォームをドラッグすると Popup だけ置いてけぼりになる。

あちこちのサイトを見ると、ToggleButton の IsChecked にバインドしろとか書いてあるけど、お前らそんなに Popup をトグルボタンでオープンしたいのか?

上記URLの解は非常にシンプルだ。

自分は TextBox の横に Popup を配置して、TextBoxのPreviewMouseLButtonClick で IsOpen=True にし、 LostFocus で IsOpen=Falseにする処理も追加した。

まぁ、騙されたと思ってやってみて欲しい。
TextBox をマウスでクリックすると Popup が開き、
フォーム上のどこかをクリックすると Popup は消える。
フォームをドラッグしようとしてもきちんと消えるし、
フォーム外のどこかをクリックしても消えてくれる。