Der Trigger "IsMouseOver" funktioniert nicht, wenn ShowDialog und randloses Fenster verwendet werden

8

Ich habe zwei Windows für eine Anwendung. Einer von ihnen ist MainWindow und der andere ist für Einstellungen. SettingsWindow wird geöffnet, wenn auf die Schaltfläche "Einstellungen" geklickt wird, indem Sie ShowDialog verwenden und Owner auf MainWindow setzen.

Am SettingsWindow habe ich einen Button ganz unten im Fenster und er ändert die Farbe in rot wenn IsMouseOver ist True und blau für False . Es ändert sich jedoch nicht, wenn sich der Cursor über dem MainWindow befindet. Das Bild ist unten klar zu sein. Wie kann ich dieses Problem beheben?

CASE: Der Cursor befindet sich außerhalb von SettingsWindow, behält aber die rote Farbe, keine Änderung.

Xaml-Code:

%Vor%     
Ali Tor 31.08.2016, 20:23
quelle

3 Antworten

2

Nach einigen Nachforschungen konnte ich keinen logischen Grund dafür finden. Es scheint eher ein Fehler für mich zu sein. Also, wenn jemand genau weiß, warum das passiert, lass es uns wissen!

Wie auch immer, ich habe mir einen Workaround ausgedacht. Im Grunde können wir Show () verwenden und etwas Code hinzufügen, um näher an ein modales Verhalten heranzukommen - wie das Elternfenster zu deaktivieren, bis der Dialog geschlossen wird oder der Benutzer OK oder Abbrechen für die Instanz gewählt hat.

Beispiel:

%Vor%

Nachdem wir das geschlossene window settingsWindow abonniert haben, können wir nun das übergeordnete Fenster wieder aktivieren, wenn settingsWindow geschlossen wird:

%Vor%

Trigger funktionieren jetzt korrekt und das übergeordnete Fenster wird deaktiviert, bis das untergeordnete Fenster geschlossen wird.

    
Forlani 01.09.2016 16:18
quelle
1

Ich denke, Sie müssen die Mausposition manuell beobachten. Dafür könntest du den Code verwenden, der von Peheje hier gepostet wurde .

Ich habe dies benutzt, um ein funktionierendes Beispiel zu programmieren. Beim Verlassen des Fensters erhält der Button den richtigen Stil.

%Vor%

xaml

%Vor%     
WPFGermany 26.09.2016 06:16
quelle
0

Dies funktioniert für mich: Definieren Sie eine Stilressource (für die Schaltfläche) unter Einstellungen Window.Resources - Dieser Stil legt dann die neue Vorlage (einen Rahmen), den Standardhintergrund als blau und den IsMouseOver-Auslöser fest, um ihn in rot zu ändern . Verweise den Stil entweder explizit auf implizit (beide funktionierten für mich).

Link zu einem kleinen Testprojekt: Ссылка

%Vor%     
Fredrik 20.09.2016 09:50
quelle

Tags und Links