【发布时间】:2012-01-04 09:03:44
【问题描述】:
我有一个 ContextMenu,其中包含一些可以选择的项目 (MenuItem) 的子菜单。打开 ContextMenu 时,我想递归地打开当前选中的项目。所以,我有以下代码:
protected override void OnOpened( RoutedEventArgs e ) {
base.OnOpened( e );
OpenCurrentSubMenu( Items );
}
private static bool OpenCurrentSubMenu( ItemCollection itemCollection ) {
foreach (MenuItem item in itemCollection) {
if (item.IsChecked) {
return true;
}
else if( OpenCurrentSubMenu( item.Items ) ) {
item.IsSubmenuOpen = true;
return true;
}
}
return false;
}
我还有一些其他代码可以确保只检查一项。
当我第一次在子菜单中选择一个项目时,这似乎很有效。当我重新打开 ContextMenu 时,打开的子菜单级联打开到所选项目:
但是,当我离开上下文菜单并再次打开它时,所选菜单不会打开:
有谁知道为什么以及如何解决它?
【问题讨论】:
-
您的标题显示“IsItemChecked”,但您的代码显示“IsSubmenuOpen”。
-
@ScottRippey - 已更新。谢谢。
-
你能用更多级别的菜单来测试这个吗?每次重新打开都会减少 1 级重新打开,还是总是不打开最终菜单?
-
@Damien_The_Unbeliever - 经过一些实验,似乎在进行选择后的第一个 Open 可以工作到 n 个级别。但是,下一个和后面的 Open 只打开到 1 级。
标签: c# .net contextmenu submenu