WPF奇怪的上下文菜单行为
我使用以下代码动态创建一个contextmenuWPF奇怪的上下文菜单行为,wpf,contextmenu,Wpf,Contextmenu,我使用以下代码动态创建一个contextmenu protected MenuItem itemAdd, itemDelete, itemSelectBranch, itemDeleteClasp; protected MenuItem itemCut, itemCopy, itemPaste, itemAddParent, itemPasteWithChildren; protected MenuItem itemAddTask, itemAddExtTask, item
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属性。然而,菜单看起来很奇怪。菜单项中的每个文本都居中。它看起来很难看,坦率地说,我不知道为什么会这样。有人能告诉我如何使它与左边对齐吗?上下文菜单默认情况下在左边为图标留出空间。我建议使用该空间放置图标,或者覆盖ContextMenu的
ControlTemplate
,以获得不同的外观和感觉
此示例将帮助您开始使用ControlTemplate
:
如果您已经知道图标空间,并且参考默认情况下
MenuItem
标题的定位方式,那么请确保将标题
文本包装在StackPanel
中,并相应地定位其垂直或水平布局。我已经知道图标空间。似乎我必须将标题文本包装在一个面板中。但是我不知道该怎么做?我应该为每个标题创建新的stacnpanel吗?我试图使用horizontalalignment和horizontalcontentalignemt属性(并将它们设置为Left),但它不起作用。您可以提供更多代码吗?我无法在我的盒子上复制这个,所以可能需要对配置进行一些小的更改。您使用的是什么版本的.NET?我在使用.NET 3.5时遇到了一些类似的问题,但更多的是与垂直对齐有关——水平对齐默认为左对齐。我以.NET 3.5和3.0为目标重新构建了项目,但我仍然没有使用您的代码解决这个问题(所有内容都是左对齐的)。还有其他注意事项吗?如何定义文本框及其容器?如果可以,给我一个完整的例子,我会看看是否可以复制它。我想我发现了一个问题。如果我用左菜单替换中心,我会在文本框中设置一个样式。但是,我希望文本框中的文本居中。