WPF странное поведение контекстного меню - PullRequest
0 голосов
/ 18 сентября 2010

Я динамически создаю контекстное меню, используя этот код

   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. Однако меню выглядит странно. Каждый текст в пунктах меню центрируется. Это выглядит довольно уродливо и откровенно говоря, я не знаю, почему это выглядит так. Может ли кто-нибудь объяснить мне, как я могу выровнять его по левому краю?

1 Ответ

0 голосов
/ 18 сентября 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...