Visual Studio 2010でWPFデザイン時の奇妙な動作に遭遇しました。ポップアップクラスのインスタンスが作成され、Visual Studioのコードタブを別のファイルに切り替えた後も、ポップアップは画面に表示されたままになります。
これを再現できるコードがありますが、ここに貼り付ける必要があるかどうかはわかりません(それほど短くはありません)。そのため、リンクをここに示します。
Visual Studio 2010でWPFデザイン時の奇妙な動作に遭遇しました。ポップアップクラスのインスタンスが作成され、Visual Studioのコードタブを別のファイルに切り替えた後も、ポップアップは画面に表示されたままになります。
これを再現できるコードがありますが、ここに貼り付ける必要があるかどうかはわかりません(それほど短くはありません)。そのため、リンクをここに示します。
単なる人間の理解を超えた未知の理由により、MicrosoftはこれがPopup
WPFのクラスのデフォルトの動作であると判断しました。「非表示」ロジックを自分で実装する必要があります。Window.LocationChanged
ポップアップを含むウィンドウの、Window.Activated
およびWindow.Deactivated
イベントを処理し、自分で閉じることをお勧めします。
編集:自分自身を明確にするために、処理する必要のあるウィンドウイベントは、ポップアップのPlacementTarget
要素を含むウィンドウのイベントです。通常、ポップアップを作成するときは、アプリケーションのウィンドウに含まれる要素を基準にしてポップアップを設定します(ツールチップの動作と同様)。これがあなたの場合であれば、私の解決策は正しいですが、PlacementTargetについてこの点について言及するのを忘れました。
コードビハインドで; このブール値を簡単に確認できます:
DesignerProperties.GetIsInDesignMode(this);
「this」は、ポップアップを含むオブジェクトを表します。たとえば、ウィンドウ。
本当の場合、次のように言えます。
myPopUp.IsOpen = false;
ストア アプリ/WinRT の場合:
Windows.ApplicationModel.DesignMode.DesignModeEnabled