Ich möchte, dass sich das Hauptmenü in meiner WPF-App wie das Hauptmenü in IE8 verhält:
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% 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.
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.
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.
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:
Tags und Links wpf keyboard-shortcuts visibility menu toggle