Ich habe ein benutzerdefiniertes Benutzersteuerelement, das versucht, die automatische Vervollständigung für ein Textfeld neu zu erstellen. Wenn der Benutzertyp verwendet wird, wird der Text zum Filtern einer bereitgestellten Sammlung von Elementen verwendet, und dann zeigt ein Popup eine ListBox mit Elementen an, die mit dem eingegebenen Benutzer übereinstimmen.
Wenn der Benutzer beschließt, von der Anwendung in ein anderes Fenster zu wechseln (Browser, MS Word, irgendetwas!), bleibt das Popup auf jedem anderen Fenster!
Auch wenn ich mein Fenster (das das benutzerdefinierte Steuerelement enthält) mit geöffnetem Popup verschiebe, bleibt das Popup an seinem Platz (und folgt nicht dem Fenster)! Es ist ein lustiges, aber offensichtlich nicht akzeptables Verhalten. Ich habe mich umgesehen, aber nur einen Beitrag gefunden, der zwei Jahre lang unbeantwortet geblieben ist: (
Ich hatte das gleiche Problem in einem ähnlichen Szenario. Was ich getan habe, war, dass ich alle möglichen "verlorenen Fokus" -Ereignisse des Controls abonniert habe und auch das Fenster bekommen habe, das das Steuerelement beherbergt und seine GotMouseCapture- und LocationChanged-Ereignisse abonniert hat. Ereignisbehandlungsroutinen all dieser Ereignisse setzen die IsOpen-Eigenschaft des Popups auf false.
Sie können das Hosting-Fenster mit diesem erhalten:
%Vor%Der ganze andere Code ist einfach eine Menge Ereignisse zu abonnieren, um dasselbe zu tun.
P.S. Ich sage nicht, dass es eine schöne oder optimale Lösung ist, aber es funktioniert gut für mich:)
Laut Popup-Dokumentation :
Wenn Popup auf dem Bildschirm angezeigt wird, positioniert es sich nicht neu, wenn das übergeordnete Element neu positioniert wird.
Es sieht also nicht so aus, als wäre es ein sehr guter Kandidat für eine Autocomplete-Textbox. Ich denke, die Klasse ist eher dazu gedacht, Informationen zu zeigen, wenn man den Mauszeiger über ein Objekt bewegt.
Tags und Links wpf popup custom-controls