2011-09-29 14 views
8

WPFは本当に私をここから解放しています。私はいくつかの複雑なコンテンツ(グリッド、ボタンなど)でポップアップを構成しました。私はStaysOpenプロパティをFalseに設定し、テキストボックスMouseDownプレビューイベントではTrueに設定します。ポップアップが決して閉じることはありません

これは、ウィンドウの外のどこかをクリックすると開きますが決して閉じないことです。

提案がありますか?

ありがとうございます!

UPDATE:

私のポップアップが内部にボタンがあります。そのうちの1つをクリックすると、ポップアップが外に出ると閉じます。いくつかの奇妙なものがイベントのルーティングに起こっていますか?

+0

手動で閉じるボタンを押してみたことがありますか? ESCキーのようなキーをマップしてポップアップをエスケープします。 –

+0

私はそれを好きにすることはできますが、フォーカスを失うと自動的に閉じる必要があります。 –

+0

この問題を示す簡単なXAMLを追加できますか(デバッグにも役立ちます)? –

答えて

4

他のコントロールイベントで開くと、ポップアップが閉じないように見えます。私はコンボボックスをシミュレートするためにIsOpenプロパティをToggleButtonのIsCheckedプロパティにバインドしました。

すべてのお返事ありがとうございます。

+0

私は同意し、同じことが私のために働いた。奇妙な行動は、しかし働いた。トグルボタンのIsCheckedプロパティにコード内のIsOpenPropertyのバインディングを作成し、正常に機能しました。買います :) – TravisWhidden

0

テキストボックスのMouseDownプレビューイベントにIsOpenを設定しました。

何に設定しますか? TextBoxはどこにホストされていますか?

提供される情報が不足していると推測できますが、Popupの外側をクリックすると、イベントハンドラが起動してもう一度開きます。

+0

テキストボックスは、ウィンドウで使用されるユーザーコントロールの内部にあります。ユーザーコントロールでは、テキストボックスがクリックされるたびにIsOpen = trueを設定します。ポップアップがフォーカスを失うと決して閉じません。 –

0

ポップアップのLostFocusイベントを使用できます。フォーカスがポップアップ内にない場合は、IsOpenをfalseに設定してフォーカスを閉じます。

+0

何もしません。ポップアップIsOpenプロパティをtrueに設定してウィンドウを開始すると、正常に動作します。テキストボックスのPreviewMouseButtonDownイベントに設定しても動作しません。 –

0

ボタンのPreviewMouseButtonUpイベントを除いて、この問題も発生していました。 Popupsにいくつかのバグがあり、トンネリングイベントでそれらを開こうとしているという前提が正確で、私の修正(これは少し一般的です)への道を私に導きました。

トンネルイベントの代わりにバブリングイベント、具体的にはAddHandler(RoutedEvent,Delegate,Boolean)メソッドをリッスンして、処理されたイベントを取得することで、これを解決する必要がありました(ホストコントロールは汎用/複数のコントロールの種類があります)。

WAGトンネリングからバブリングに移行するときに問題が発生します。

0

ポップアップを初期化するコードビハインドを使用し、マウスイベントのような他のUIアクションから同期を実行すると閉じられないことがわかりました。この問題を回避するには、私は非同期に実行します:

public static void ShowPopupMessage(string message) 
    { 
     DispatcherHelper.UIDispatcher.BeginInvoke(new Action(() => 
     { 
      var popup = new Popup 
      { 
       Child = new AutoHideMessage(message), 
       StaysOpen = false, 
       IsOpen = true 
      }; 
     })); 
    } 
関連する問題