WPF真的讓我擺脫我的神經在這裏。我配置了一些帶有一些複雜內容(網格,按鈕等)的彈出窗口。在文本框MouseDown預覽事件中,我將其StableOpen屬性設置爲False,將IsOpen設置爲True。彈出窗口永不關閉
THS的是,它打開,但從來沒有單擊窗口外的任何地方時關閉。
有什麼建議嗎?
謝謝!
UPDATE:
我彈出了裏面的按鈕。當我點擊其中一個時,彈出窗口會在我點擊它之外時關閉。事件路由發生了一些奇怪的事情嗎?
WPF真的讓我擺脫我的神經在這裏。我配置了一些帶有一些複雜內容(網格,按鈕等)的彈出窗口。在文本框MouseDown預覽事件中,我將其StableOpen屬性設置爲False,將IsOpen設置爲True。彈出窗口永不關閉
THS的是,它打開,但從來沒有單擊窗口外的任何地方時關閉。
有什麼建議嗎?
謝謝!
UPDATE:
我彈出了裏面的按鈕。當我點擊其中一個時,彈出窗口會在我點擊它之外時關閉。事件路由發生了一些奇怪的事情嗎?
看起來像彈出窗口將不會關閉,如果由任何其他控件事件打開。我只是將IsOpen屬性綁定到ToggleButton的IsChecked屬性來模擬組合框。
感謝您的答案。
我同意,同樣的事情爲我工作。奇怪的行爲,但工作。在代碼中爲IsOpenProperty創建了一個綁定到一個切換按鈕IsChecked屬性,它工作正常。我要買它 :) – TravisWhidden
我在文本框的MouseDown預覽事件上設置了IsOpen。
它設置的是什麼? TextBox託管在哪裏?
我只能猜測提供的信息很少,但我會說當你點擊Popup
以外的地方時,你的事件處理程序正在觸發並再次打開它。
該文本框位於窗口中使用的用戶控件中。在用戶控件中,無論何時單擊文本框,我都會設置IsOpen = true。當彈出窗口失去焦點時,它永遠不會關閉。 –
您可以使用LostFocus
事件彈出窗口。如果焦點不在彈出框內,請將它的IsOpen
設置爲false以關閉它。
它什麼也沒做。如果我將彈出的IsOpen屬性設置爲true來啓動窗口,它將正常工作。如果我在文本框PreviewMouseButtonDown事件上設置它不起作用。 –
我也有這個問題,除了在按鈕的PreviewMouseButtonUp事件。假設Popups存在一些錯誤並試圖在Tunneling事件中打開它們,這是非常準確的,並且讓我走上了修補程序的路徑(這更通用一些)。
我需要通過偵聽冒泡事件而不是隧道事件來解決這個問題(主機控件是通用的/可能是幾種類型的控件),特別是使用AddHandler(RoutedEvent,Delegate,Boolean)方法來捕獲處理的事件。從隧道過渡到起泡時
WAG問題在於某處。
我用後面的代碼初始化彈出,我發現,如果從如鼠標事件的其他UI動作跑同步沒有關閉。要解決此問題,我運行它異步:
public static void ShowPopupMessage(string message)
{
DispatcherHelper.UIDispatcher.BeginInvoke(new Action(() =>
{
var popup = new Popup
{
Child = new AutoHideMessage(message),
StaysOpen = false,
IsOpen = true
};
}));
}
你試過手動關閉它像你有任何關閉按鈕嗎?或將ESC鍵等鍵映射到彈出窗口。 –
我可以這樣做,但我需要它失去焦點時自動關閉。 –
你可以添加簡單的XAML來證明這個問題(也可以幫助你調試)? –