【发布时间】:2017-03-13 21:11:33
【问题描述】:
我有一个问题 - 在后面的代码中我添加了MenuItems 的集合,其中一个有一个StackPanel 作为它的Header。在StackPanel 中有一个Button 应该关闭整个ContextMenu,但不幸的是它没有。任何帮助将不胜感激。
代码示例:
var itemB = new MenuItem();
var stackPanel = new StackPanel() { Orientation = Orientation.Horizontal };
var textBox = new TextBox() { Width = 60 };
var button = new Button() { Content = "Ok", Width = 60 };
stackPanel.Children.Add(textBox);
stackPanel.Children.Add(button);
itemB.Header = stackPanel;
//1st approach - doesn't work, I can only get access to MenuItem Header
button.Click += (sender, e) =>
{
FrameworkElement fe = sender as FrameworkElement;
while (fe != null)
{
if (fe is ContextMenu)
{
(fe as ContextMenu).IsOpen = false;
break;
}
fe = fe.Parent as FrameworkElement;
}
};
//2nd approach - doesn't work, I can only get access to MenuItem Header
itemB.PreviewMouseUp += (sender, e) =>
{
((MenuItem)((MenuItem)sender).Parent).IsSubmenuOpen = false;
};
我找到了类似的文章,但没有成功:
【问题讨论】:
-
有什么消息吗?我已经发布了答案,我想知道它是否适合您,或者您是否找到了其他解决方案。
-
@Massimiliano 嗨!谢谢你的回答。这种方式可以工作,但在我的情况下,ContextMenu 是在 xaml 中定义的,如果可能的话它应该留在那里。
标签: wpf menu contextmenu