Wie kann ich die Sichtbarkeit des Hauptmenüs mit der Alt-Taste in WPF ändern?

8

Ich möchte, dass sich das Hauptmenü in meiner WPF-App wie das Hauptmenü in IE8 verhält:

  • es ist nicht sichtbar, wenn die App gestartet wird
  • Drücken und Loslassen von Alt macht es sichtbar
  • Drücken und Loslassen von Alt macht es wieder unsichtbar
  • wiederhole es bis gelangweilt

Wie kann ich das tun? Muss es Code sein?

Als Antwort auf die Antworten hinzugefügt, weil ich immer noch Probleme habe:

Mein Shell Code-Behind sieht jetzt so aus:

%Vor%     
serialhobbyist 02.08.2009, 08:11
quelle

4 Antworten

8

Sie können das PreviewKeyDown -Ereignis im Fenster verwenden. Um die Taste Alt zu erkennen, müssen Sie die Eigenschaft SystemKey von KeyEventArgs überprüfen, im Gegensatz zu der Key-Eigenschaft, die Sie normalerweise für die meisten anderen Schlüssel verwenden.

Sie können dieses Ereignis verwenden, um einen bool -Wert festzulegen, der im Windows-Code als DependencyProperty deklariert wurde.

Die Eigenschaft Visibility des Menüs kann dann mithilfe von BooleanToVisibilityConverter an diese Eigenschaft gebunden werden.

%Vor%     
Ian Oakes 02.08.2009, 13:48
quelle
1

Ich würde versuchen, das Ereignis PreviewKeyDown in Ihrem Fenster zu behandeln. Ich bin mir nicht sicher, ob das Drücken von Alt dieses Ereignis auslöst oder nicht, aber wenn dies der Fall ist, würde ich ein bool umschalten, das an die Sichtbarkeit des Hauptmenüs des Fensters gebunden ist.

Wenn PreviewKeyDown nicht funktioniert, bin ich mir nicht sicher, was ich sonst noch versuchen soll. Sie könnten versuchen, die tatsächlichen Windows-Nachrichten zu erhalten, die an Ihr Fenster gesendet werden, aber das könnte sehr schnell unordentlich werden.

    
Andy 02.08.2009 12:45
quelle
1

Es wäre besser, GetKeyboardState mit% co_de zu verwenden %, um sowohl links als auch rechts Alt zu bearbeiten, um das Verhalten von IE / Windows Explorer (Vista +) nachzuahmen, müssen Sie das zuvor fokussierte Element zum Speichern des Fokus verfolgen, während Sie in VK_MENU drücken fokussiertes Element befindet sich in Ihrem Hauptmenü. Sie möchten diese Arbeit auch an VK_MENU (nicht down) durchführen.

    
Phil Price 02.08.2009 18:16
quelle
1

Ich bin gerade selbst auf dieses Problem gestoßen. Ich habe versucht, mich in das Ereignis PreviewKeyDown einzuklinken, fand es aber unzuverlässig. Stattdessen habe ich die InputManager -Klasse gefunden, wo Sie in den EnterMenuMode von verwaltetem Code einhaken können. Der Manager stellt zwei Ereignisse für das Ein- und Ausblenden bereit. Der Trick besteht darin, das Menü nicht zu reduzieren, sondern die Containerhöhe auf Null zu setzen, wenn es ausgeblendet werden soll. Um es anzuzeigen, löschen Sie einfach den lokalen Wert und er wird seine vorherige Höhe annehmen.

Von meinem TopMenu user control:

%Vor%     
jjrdk 18.05.2011 09:22
quelle