2010-09-17 13 views
0

créer un contextmenu en utilisant ce code dynamiclyWPF comportement de menu contextuel étrange

protected MenuItem itemAdd, itemDelete, itemSelectBranch, itemDeleteClasp; 
    protected MenuItem itemCut, itemCopy, itemPaste, itemAddParent, itemPasteWithChildren; 
    protected MenuItem itemAddTask, itemAddExtTask, itemAddMileStone; 
menu = new ContextMenu(); 
     itemAdd = new MenuItem 
         { 
          HorizontalAlignment = HorizontalAlignment.Left, 
          HorizontalContentAlignment = System.Windows.HorizontalAlignment.Stretch, 
          Header = "Add" 
         }; 
     itemDelete = new MenuItem 
         { 
          HorizontalAlignment = HorizontalAlignment.Left, 
          HorizontalContentAlignment = System.Windows.HorizontalAlignment.Stretch, 
          Header = "Delete" 
         }; 
     itemSelectBranch = new MenuItem 
     { 
      HorizontalAlignment = HorizontalAlignment.Left, 
      HorizontalContentAlignment = System.Windows.HorizontalAlignment.Stretch, 
            Header = "Select" 
           }; 
     itemAddTask = new MenuItem 
     { 
      HorizontalAlignment = HorizontalAlignment.Left, 
      HorizontalContentAlignment = System.Windows.HorizontalAlignment.Stretch, 

           Header = "Task", 

          }; 
     itemAddParent = new MenuItem 
          { 
           HorizontalAlignment = HorizontalAlignment.Left, 
           HorizontalContentAlignment = System.Windows.HorizontalAlignment.Stretch, 
           Header = "Parent" 
          }; 

     itemAddMileStone = new MenuItem 
           { 
            HorizontalAlignment = HorizontalAlignment.Left, 
            HorizontalContentAlignment = System.Windows.HorizontalAlignment.Stretch, 
            Header = "Do sth", 

           }; 
     itemAddExtTask = new MenuItem 
          { 
           HorizontalAlignment = HorizontalAlignment.Left, 
           HorizontalContentAlignment = System.Windows.HorizontalAlignment.Stretch, 
           Header = "Do sth" 
          }; 
     itemDelete.HorizontalAlignment = HorizontalAlignment.Left; 
     itemDelete.Click += itemDelete_Click; 



     itemDeleteClasp = new MenuItem 
           { 
            HorizontalContentAlignment = System.Windows.HorizontalAlignment.Stretch, 
            HorizontalAlignment = HorizontalAlignment.Left, 
            Header = "Do sthm" 
           }; 
     itemDeleteClasp.Click += itemDeleteClasp_Click; 
     itemCopy = new MenuItem {Header = Do sth",HorizontalAlignment = System.Windows.HorizontalAlignment.Left}; 

     itemCopy.Click += itemCopy_Click; 
     itemCut = new MenuItem 
         { 
          HorizontalAlignment = HorizontalAlignment.Left, 
          Header = "Cut" 
         }; 

     itemPaste = new MenuItem 
         { 
          HorizontalAlignment = HorizontalAlignment.Left, 
          Header = "Paste" 
         }; 

     itemAddParent = new MenuItem 
          { 
           HorizontalAlignment = HorizontalAlignment.Left, 
           Header = "Do sth" 
          }; 

     itemPasteWithChildren = new MenuItem 
            { 
             HorizontalAlignment = HorizontalAlignment.Left, 
             Header = "some long text" 
            }; 
     itemPasteWithChildren.Click += itemPasteWithChildren_Click; 
     itemAddParent.Click += itemAddParent_Click; 
     itemPaste.Click += itemPaste_Click; 
     itemCut.Click += itemCut_Click; 
     itemAddTask.Click += itemAddTask_Click; 
     itemAddExtTask.Click += itemAddExtTask_Click; 
     itemAddMileStone.Click += itemAddMileStone_Click; 
     itemAddParent.Click += itemAddParent_Click; 
     itemSelectBranch.Click += itemSelectBranch_Click; 
     itemAdd.Items.Add(itemAddTask); 
     itemAdd.Items.Add(itemAddExtTask); 
     itemAdd.Items.Add(itemAddMileStone); 
     itemAdd.Items.Add(itemAddParent); 
     menu.Items.Add(itemAdd); 
     menu.Items.Add(itemDelete); 
     menu.Items.Add(itemDeleteClasp); 
     menu.Items.Add(itemSelectBranch); 
     menu.Items.Add(itemCopy); 
     menu.Items.Add(itemCut); 
     menu.Items.Add(itemPaste); 

Ce menu est attaché à textbox.contextmenu propriété. Cependant, le menu semble étrange. Chaque texte des éléments de menu est centré. Il semble assez laid et franchement parlant je ne sais pas pourquoi cela ressemble à ça. Quelqu'un pourrait-il m'expliquer comment je peux l'aligner à gauche?

Répondre

0

Les menus contextuels laissent par défaut de l'espace sur la gauche pour les icônes. Je suggère soit d'utiliser cet espace pour le placement d'icônes, soit de remplacer le ControlTemplate du ContextMenu pour obtenir un aspect différent.

Cet exemple devrait vous aider à démarrer sur le ControlTemplate:

http://msdn.microsoft.com/en-us/library/ms744758(VS.85).aspx

Si vous connaissez déjà l'espace icône et faites référence à la façon dont MenuItem en-têtes sont positionnés par défaut, assurez-vous Envelopper le texte Header dans un StackPanel et positionner sa disposition verticale ou horizontale en conséquence.

+0

Je connais déjà l'espace des icônes. Il semble que je dois emballer le texte d'en-tête dans un StacPanel. Cependant, je ne sais pas exactement comment le faire? Dois-je pour chaque en-tête créer un nouveau stacnpanel ?? – george

+0

J'essayais d'utiliser la propriété horizontalalignment et horizontalcontentalignemt (et de les mettre à gauche) mais cela n'a pas fonctionné – george

+0

Pouvez-vous fournir plus de code s'il vous plaît? Je ne suis pas capable de reproduire ceci sur ma boîte, donc c'est probablement un petit changement de configuration que vous devez faire. Quelle version de .NET utilisez-vous? J'avais quelques problèmes semblables au travail en utilisant .NET 3.5, mais cela avait plus à faire avec l'alignement vertical - l'alignement horizontal serait par défaut à gauche. – McStretch