在WPF中以编程方式显示菜单

在WPF中以编程方式显示菜单,wpf,menu,Wpf,Menu,如何在WPF中以编程方式打开菜单(System.Windows.Controls.menu)?抓住菜单项,然后执行以下操作: _menuItem.IsSubmenuOpen = true; 查看这个关于如何打开上下文菜单的示例 总之 你可以打电话: YourContextMenu.IsOpen = true; 这将显示上下文菜单,只需确保其与正在显示的框架元素关联即可)否,OP询问的是菜单类(System.Windows.Controls.menu)。它没有IsOpen属性。也许您正在考虑

如何在WPF中以编程方式打开菜单(System.Windows.Controls.menu)?

抓住菜单项,然后执行以下操作:

_menuItem.IsSubmenuOpen = true;

查看这个关于如何打开上下文菜单的示例

总之

你可以打电话:

YourContextMenu.IsOpen = true;

这将显示上下文菜单,只需确保其与正在显示的框架元素关联即可)

否,OP询问的是菜单类(System.Windows.Controls.menu)。它没有IsOpen属性。也许您正在考虑ContextMenu类。您还需要使用预期的“target”UIElement初始化
您的ContextMenu.PlacementTarget
。否则,从XAML字符串动态构造的菜单(使用
XamlReader
)将无法解析资源,并且将没有图标。例如,听
ContextMenu.Opened
,然后调用
CnotextMenu.Focus()
,以确保它接收到键盘输入,例如,确保ESC键由上下文菜单处理(关闭),并且箭头键可用于导航。
void CmsBox_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    box = sender as WpfBox;
    ContextMenu cms = new ContextMenu();
    e.Handled = true;
    ...
}
private void button_Click(object sender, RoutedEventArgs e)
{
    var button= sender as FrameworkElement;
    if (button != null)
    {
        button.ContextMenu.IsOpen = true;
    }
}
        private void MainGrid_Loaded(object sender, RoutedEventArgs e)
        {
            IncList.ItemsSource = m_DataSource;
            IncList.ContextMenu = new ContextMenu();
            IncList.ContextMenu.Items.Add(new MenuItem() { Header = "Test1" });
            IncList.ContextMenu.Items.Add(new MenuItem() { Header = "Test2" });
        }