J'aimerais que le menu principal de mon application WPF se comporte comme le menu principal dans IE8:
Comment puis-je faire cela? Cela doit-il être du code? P>
ajouté en réponse aux réponses soumises, car je n'ai toujours pas de problème: em> p> mon code de coquille-derrière maintenant comme ceci: p>
5 Réponses :
J'essayerais d'examiner la gestion de l'événement code> andoindown code> 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 Si bool code> qui est lié à la visibilité du menu principal de la fenêtre. P >
aperçuDowndown code> 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. P>
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.
Vous pouvez utiliser l'événement Vous pouvez utiliser cet événement pour définir une valeur La propriété 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.
bool code> déclarée sous forme de dépendanceProperty code> dans le code Windows derrière. P>
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}}
/>
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. :-)
Il serait préférable d'utiliser GetkeyboardState code>
avec vk_menu code> pour gérer à gauche et à droite alt kbd>, 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 code> Appuyez sur tandis que l'élément ciblé est dans votre menu principal. Vous souhaitez également faire ce travail sur
PrevieviewKeyup CODE> (pas bas). p>
Merci. Au Mo, je ne peux même pas obtenir les bases d'aller alors je quitterai un peu de choses!
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 de mon 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.
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);
}
Voir ma réponse au thread suivant: Comment faire de WPF Menubar Visibile Lorsque vous appuyez sur la touche Alt? P>
là, je décris comment résoudre votre problème avec la classe Vous pouvez enregistrer les événements de classe INPUTMANAGER code> strud>
(de l'espace de noms system.windows.input code>). P>
ENTERMENUMODE CODE> et
LEAVEMENUMODE CODE>. P>
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.