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 属性。然而菜单看起来很奇怪。菜单项中的每个文本都居中。它看起来很丑陋,坦白说我不知道为什么它看起来是这样的。有人可以解释一下如何使其左对齐吗?
I create a contextmenu dynamicly using this code
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);
This menu is attached to textbox.contextmenu property. However menu looks strange. Every text in menu items is centered. It looks quite ugly and frankly speaking I don't know why this looks that way. Could somebody explain me how I can make it align to left ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
默认情况下,上下文菜单在左侧为图标留有空间。我建议要么使用该空间来放置图标,要么覆盖 ContextMenu 的
ControlTemplate
以获得不同的外观和感觉。此示例应帮助您开始使用
ControlTemplate
:http://msdn.microsoft.com/en-us/library/ms744758(VS.85).aspx
如果您已经了解图标空间,并且正在参考
MenuItem
标题默认定位,然后确保将Header
文本包装在StackPanel
中,并相应地定位其垂直或水平布局。The context menus leave space on the left for icons by default. I would suggest either using that space for icon placement, or override the ContextMenu's
ControlTemplate
to get a different look and feel.This example should help get you started on the
ControlTemplate
:http://msdn.microsoft.com/en-us/library/ms744758(VS.85).aspx
If you already know about the icon space, and are referring to the way
MenuItem
Headers are positioned by default, then make sure you wrap theHeader
text in aStackPanel
and position its vertical or horizontal layout accordingly.