8
votes

Comment puis-je basculer la visibilité du menu principal en utilisant la touche Alt dans WPF?

J'aimerais que le menu principal de mon application WPF se comporte comme le menu principal dans IE8:

  • Ce n'est pas visible lorsque l'application commence
  • Appuyez sur et la libération de l'alt le rend visible
  • Appuyez sur et libérer Alt Alt le rend invisible à nouveau
  • Répétez jusqu'à ce que ennuyé

    Comment puis-je faire cela? Cela doit-il être du code?

    ajouté en réponse aux réponses soumises, car je n'ai toujours pas de problème:

    mon code de coquille-derrière maintenant comme ceci: xxx


3 commentaires

Vous voulez imiter Internet Explorer ...?


J'essaie de garder mes applications compatibles avec ce que les utilisateurs attendent, alors oui. :-)


Pourraient aussi bien compter pour la clé F10 déclenchant le même comportement pour la cohérence.


5 Réponses :


1
votes

J'essayerais d'examiner la gestion de l'événement andoindown sur votre fenêtre. Je ne sais pas si vous appuyez sur Alt déclenche cet événement ou non, mais si tel est le cas, je bascule un bool qui est lié à la visibilité du menu principal de la fenêtre.

Si aperçuDowndown ne fonctionne pas, je ne suis pas sûr de quoi essayer d'autre. Vous pouvez rechercher les messages Windows envoyés à votre fenêtre, mais cela pourrait vous désordonner très rapidement.


1 commentaires

Merci pour la suggestion. Je vais avec la suggestion de la previewKeyup's de Phil Price parce que c'est plus proche de c.-à-coup, mais sinon cela semble faisable.



8
votes

Vous pouvez utiliser l'événement PreviewyDownDown code> sur la fenêtre. Pour détecter la touche ALT KBD>, vous devez vérifier la propriété systemkey code> du keeventargs code>, par opposition à la propriété Key que vous utilisez normalement pour la plupart Autres clés.

Vous pouvez utiliser cet événement pour définir une valeur bool code> déclarée sous forme de dépendanceProperty code> dans le code Windows derrière. P>

La propriété VISIBILITÉ CODE> DE MENU peut alors être lié à cette propriété à l'aide du BooleantVisiviConverter code>. P>

<Menu 
    Visibility={Binding Path=IsMenuVisibile, 
        RelativeSource={RelativeSource AncestorType=Window},
        Converter={StaticResource BooleanToVisibilityConverter}}
    />


4 commentaires

Je ne peux pas obtenir ce travail. J'ai mis à jour la question initiale avec le code-derrière pour ma dépendanceProperty. C'est la première fois que j'ai déclaré le mien alors ... J'ai ajouté votre reliure au menu dans Shell.xaml et l'erreur que je reçois est: System.windows.data Erreur: 39: Erreur de chemin de liaison: " Ismenuvisibile 'Propriété non trouvée sur "Object"' 'Shell' (Nom = '') '. BindingExpression: chemin = ismenuvisibile; Dataitem = 'shell' (nom = ''); élément cible est "menu" (nom = 'uxmainmenu'); La propriété cible est «visibilité» (type «visibilité»). Des idées?


C'est l'erreur de liaison standard que vous obtenez lorsque la propriété est introuvable. Pour résoudre ce problème, vous devez remplacer ismenuvisible avec IsmainMénuvisible dans votre reliure.


Oh, je suis un tel idiot! Je vais me connecter et régler le sort. Merci. Et merci de ne pas souligner à quel point je suis épais. :-)


C'était exactement ça. Merci beaucoup. Non seulement j'ai mis en œuvre (merci à vous) la fonctionnalité clés Alt et ma première dépendanceProperty, mais j'ai aussi peint deux plafonds aujourd'hui: je pense que je vais maintenant, tandis que je suis devant moi. :-)



1
votes

Il serait préférable d'utiliser GetkeyboardState avec vk_menu pour gérer à gauche et à droite alt , pour imiter le comportement de l'Explorateur IE / Windows (Vista +), vous devez suivre L'élément précédemment ciblé de stocker la mise au point, sur un vk_menu Appuyez sur tandis que l'élément ciblé est dans votre menu principal. Vous souhaitez également faire ce travail sur PrevieviewKeyup (pas bas).


1 commentaires

Merci. Au Mo, je ne peux même pas obtenir les bases d'aller alors je quitterai un peu de choses!



2
votes

Je viens de tomber sur ce problème moi-même. J'ai essayé d'accrocher dans l'événement code> anokydown code>, mais je l'ai trouvé non fiable. Au lieu de cela, j'ai trouvé la classe INPUTMANAGER CODE> où vous pouvez accroître le ENTERMENUMODE CODE> du code géré. Le gestionnaire expose deux événements, pour entrer et sortir. L'astuce consiste à ne pas réduire le menu, mais définir sa hauteur du conteneur à zéro quand il doit être masqué. Pour le montrer, effacez simplement la valeur locale et cela prendra sa hauteur précédente.

de mon TOPMENU code> Contrôle de l'utilisateur: p>

public TopMenu()
{
    InitializeComponent();
    InputManager.Current.EnterMenuMode += OnEnterMenuMode;
    InputManager.Current.LeaveMenuMode += OnLeaveMenuMode;
    Height = 0;
}

private void OnLeaveMenuMode(object sender, System.EventArgs e)
{
    Height = 0;
}

private void OnEnterMenuMode(object sender, System.EventArgs e)
{
    ClearValue(HeightProperty);
}


0 commentaires

0
votes

Voir ma réponse au thread suivant: Comment faire de WPF Menubar Visibile Lorsque vous appuyez sur la touche Alt?

là, je décris comment résoudre votre problème avec la classe INPUTMANAGER (de l'espace de noms system.windows.input ).

Vous pouvez enregistrer les événements de classe ENTERMENUMODE et LEAVEMENUMODE .


0 commentaires