Popup schließt nie

8

WPF bringt mich hier wirklich aus den Nerven. Ich habe ein Popup mit komplexem Inhalt (Grid, Buttons etc.) konfiguriert. Ich setzte seine StaysOpen-Eigenschaft auf False und IsOpen auf True in einem Textbox-MouseDown-Vorschau-Ereignis.

Das ist, dass es sich öffnet, aber nie schließt, wenn Sie irgendwo außerhalb des Fensters klicken.

Irgendwelche Vorschläge?

Danke!

UPDATE:

Mein Popup enthält Schaltflächen. Wenn ich auf einen davon klicke, wird das Popup geschlossen, wenn ich darauf klicke. Gibt es seltsame Dinge, die mit dem Event-Routing zusammenhängen?

    
Luis Aguilar 29.09.2011, 21:13
quelle

5 Antworten

4

Es sieht so aus, als ob das Popup nicht geschlossen wird, wenn es von einem anderen Kontrollereignis geöffnet wird. Ich habe gerade die IsOpen-Eigenschaft an die IsChecked-Eigenschaft eines ToggleButton gebunden, um eine Combobox zu simulieren.

Danke für all deine Antworten.

    
Luis Aguilar 06.10.2011, 15:02
quelle
0
  

Ich setze IsOpen auf ein Textbox-MouseDown-Vorschau-Ereignis.

Legen Sie es auf was? Und wo wird die TextBox gehostet?

Ich kann nur mit den wenigen zur Verfügung gestellten Informationen raten, aber ich würde sagen, wenn du außerhalb von Popup klickst, feuert dein Event-Handler und öffnet es wieder.

    
Kent Boogaart 29.09.2011 21:31
quelle
0

Sie können LostFocus event des Popups verwenden. Wenn sich der Fokus nicht innerhalb des Popups befindet, setzen Sie% code_de auf false, um ihn zu schließen.

    
evpo 30.09.2011 02:21
quelle
0

Ich hatte dieses Problem auch, außer beim PreviewMouseButtonUp-Ereignis eines Buttons. Die Annahme, dass es einen Bug mit Popups gibt und versuchen, sie in Tunneling-Events zu öffnen, war korrekt und führte mich den Weg zu meinem Fix (der etwas generischer ist).

Ich musste dies auflösen (das Host-Steuerelement war generisch / könnte mehrere Arten von Steuerelementen enthalten), indem ich auf das bubbling -Ereignis statt auf das Tunneling-Ereignis lauschte, speziell mit AddHandler (RoutedEvent, Delegate, Boolean) Methode, um behandelte Ereignisse zu erfassen.

WAG das Problem liegt irgendwo beim Übergang vom Tunneln zum Blubbern.

    
Greg B 28.02.2014 19:45
quelle
0

Ich benutze Code, um Popup zu initialisieren, und ich habe festgestellt, dass es nicht geschlossen ist, wenn es von anderen UI-Aktionen wie Mausereignis synchronisiert wird. Um dies zu umgehen, starte ich async:

%Vor%     
greene 26.05.2015 09:52
quelle

Tags und Links