WPF: Niché MenuItems dans une Barre d'outils
Je suis en train de travailler sur certains XAML pour une application wpf et je vais avoir quelques problèmes à la faire faire ce que je veux. Voici un exemple de mon code XAML:
<!-- Tool Bar Tray -->
<ToolBarTray Name="toolBarTray1" DockPanel.Dock="Top">
<!-- File And Edit Tools -->
<ToolBar Name="toolBar1" Band="1" BandIndex="1">
<!-- Regular Items -->
<Button>A</Button>
<Button>B</Button>
<!-- Overflow Menu For Special Items -->
<MenuItem ToolBar.OverflowMode="Always" Header="Special Items">
<MenuItem Header="C"/>
<MenuItem Header="D"/>
</MenuItem>
</ToolBar>
</ToolBarTray>
Quand je clique sur le dépassement bouton de ma barre d'outils, le "Special Items" MenuItem s'affiche avec une petite flèche à côté de lui, indiquant les éléments imbriqués. Cependant, quand j'ai placez le pointeur de la souris sur "Special Items" ou cliquez sur elle, les MenuItems "C" et "D" ne sont pas affichés.
J'espérais que MenuItem voudrais juste travailler en dehors du Menu, mais j'ai essayé de faire le straight-forward chose, juste au cas où. Y compris ces MenuItems à l'intérieur d'un Menu, et, au lieu de donner ce Menu de la Barre d'outils.OverflowMode="Toujours" propriété produit non désirés style. La flèche n'est plus présent, le "Special Items" entrée doit être cliqué pour activer le sous-menu et le sous-menu de positionnement ressemble un peu à côté.
Personne ne sait ce qui se passe?
Edit: Ajout d'un menu pour le dépassement est de produire exactement ce que j'ai demandé (grosse surprise). Ce que je cherche est un moyen de convertir des haut-niveau des en-têtes et les éléments du sous-menu de niveau. Je me suis tourné vers ce modèle de contrôle exemple sur MSDN pour une solution (ci-dessous).
D'Éditer,De Modifier:
@gcores (commentaire la discussion): Vraiment? Ai-je raté quelque chose?
<ToolBar Name="toolBar1" Band="1" BandIndex="4">
<!-- Displayed Buttons -->
<Button>A</Button>
<Button>B</Button>
<!-- Special Items Menu -->
<Menu ToolBar.OverflowMode="Always" >
<MenuItem Style="{StaticResource MenuItemStyle}" Header="Special">
<MenuItem Header="C"/>
<MenuItem Header="D"/>
</MenuItem>
</Menu>
</ToolBar>
Ce morceau de code ne fonctionne pas pour moi. Je dois cliquer sur "Spécial" pour le sous-menu à l'écran.
OriginalL'auteur Derek E | 2009-04-10
Vous devez vous connecter pour publier un commentaire.
La seule façon que j'ai pu trouver de même pour la génération de ce comportement était de créer un menu dans le débordement qui contient un seul élément de menu dont la tête était lui-même un autre élément de menu appelé "Special Items" et contenant les bons enfants. Elle a fonctionné comme prévu, mais regardé bizarre (ce pourrait être remédié par des modèles personnalisés) et apparaît comme une énorme hack. La seule "bonne" façon de faire ce que je pense, serait de faire votre propre MenuItem-comme le contrôle des pop up un ContextMenu ou un pop-up lors de son survol, car je ne pense pas qu'une coutume ControlTemplate pouvez changer le comportement par défaut d'un menu afin de ne pas exiger un clic sur l'élément de niveau supérieur.
OriginalL'auteur Simon Broadhead
Une autre solution consiste à utiliser les modèles existants et de remplacer le Modèle de la TopLevelHeader avec le Modèle de la SubmenuHeader.
Et de l'utilisation de ce style dans votre top niveau MenuItem. Qui devrait simplifier votre code.
MODIFIER:
Vous avez raison, il ne fonctionne que lorsque vous cliquez sur elle (je ne sais pas comment je me suis convaincu qu'il a travaillé, désolé :)).
C'est la fonctionnalité est comme un TopLevelMenu même si le Modèle dit le contraire, c'est assez déroutant.
Seule chose que je peux penser à est de l'ajout d'un Déclencheur pour afficher le sous-menu IsMenuOver et la gestion de l'événement de Clic, donc il ne fait rien, mais je ne sais pas comment ça pourrait fonctionner.
Oh, enveloppez votre MenuItem dans un Menu. Autrement il n'y a pas de fonctionnalité. Je l'ai essayé et il fonctionne.
Voir "Modifier la,Modifier" dans OP.
OriginalL'auteur gcores
Après plus de lecture, une solution que j'utilise est ci-dessous.
J'attaque le comportement de 'SubmenuPopup" sur un passage de la souris, au lieu de gérer l'événement click. J'aimerais mieux comprendre ceci, j'ai donc essayé de commenter cette partie de la détente et de l'ajout d'un gestionnaire d'événement qui appelle un "ne rien faire () la méthode des "sur les" PreviewMouseDown de l'événement. Il s'avère que je suis absent quelque chose, et je pense que c'est lié à la focalisation et/ou comment un menu gère sa collection d'éléments. Ne permettant pas à un événement pour propager après " ne rien faire()' (routedEventArgs.Manipulés = true) semble d'éliminer les problèmes lorsque vous cliquez sur le "Special Items" dans le menu. Cependant, si l'on navigué loin dans le menu ou ajouté un autre élément de menu et clique ensuite sur, le hover comportement peut être désactivé ou activé et désactivé.
OriginalL'auteur Derek E