Ich habe ein Problem - in Code hinter Ich füge Sammlung von MenuItems
hinzu, eine von ihnen hat eine StackPanel
als Header
. Es gibt eine Button
in StackPanel
, die das ganze ContextMenu
schließen soll, aber leider nicht. Jede Hilfe wäre willkommen.Button im contextMenü menuItem
Codebeispiel:
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;
};
Ich habe ähnliche Artikel gefunden, aber kein Erfolg:
WPF: button inside MenuItem, closing the menu
Is there a way to programatically close a menuitem in WPF
Gibt es Neuigkeiten? Ich habe eine Antwort geschrieben, ich würde gerne wissen, ob es für Sie funktioniert oder ob Sie eine andere Lösung gefunden haben. –
@Massimiliano Hallo! Danke für die Antwort. So funktioniert es, aber in meinem Fall ContextMenu ist in XAML definiert und es sollte dort bleiben, wenn möglich. – niks