2010-09-17 3 views
0

я создаю ContextMenu динамически с помощью этого кодаWPF странного поведение контекста меню

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); 

Это меню придает textbox.contextmenu свойства. Однако меню выглядит странно. Каждый текст в пунктах меню центрирован. Это выглядит довольно уродливо и, честно говоря, я не знаю, почему так выглядит. Может ли кто-нибудь объяснить мне, как я могу привести его в соответствие с левым?

ответ

0

Контекстные меню оставляют место слева для значков по умолчанию. Я бы предложил либо использовать это пространство для размещения значков, либо переопределить ContextMenu, чтобы получить отличный внешний вид.

Этот пример должен помочь вам начать работу на ControlTemplate:

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

Если вы уже знаете о значок пространства, и имеют в виду, как MenuItem заголовки располагаются по умолчанию, убедитесь, что вы оберните текст Header в поле StackPanel и поместите его вертикальное или горизонтальное расположение соответственно.

+0

Я уже знаю о пространстве значков. Кажется, что я должен обернуть текст заголовка в StacPanel. Однако я не знаю, как это сделать? Должен ли я для каждого заголовка создать новый stacnpanel? – george

+0

Я пытался использовать функцию horizontalalignment и horizontalcontentalignemt (и установить их влево), но он не работал – george

+0

Можете ли вы предоставить больше кода, пожалуйста? Я не могу воспроизвести это на своем ящике, так что это, вероятно, небольшое изменение конфигурации, которое вам нужно сделать. Какую версию .NET вы используете? У меня были некоторые подобные проблемы при работе с .NET 3.5, но это было больше связано с вертикальным выравниванием - горизонтальное выравнивание по умолчанию оставалось бы. – McStretch

Смежные вопросы