internal void OpenSubMenu() { if (Items.Count == 0 || IsSubmenuOpen) { return; } if (ParentMi != null) { // 关闭同级已打开的菜单 if (Kit.IsPhoneUI && ParentMi.IsSubmenuOpen) { // phone模式关闭上级窗口 ParentMi.IsSubmenuOpen = false; } else { Mi last = ParentMi._lastSelected; if (last != null && last != this) { last.CloseSubMenu(); last.IsSelected = false; } } ParentMi._lastSelected = this; } else if (Kit.IsPhoneUI && Owner.IsContextMenu) { Owner.Close(); } IsSelected = true; IsSubmenuOpen = true; }
static void OnIsSelectedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { Mi item = (Mi)d; bool newValue = (bool)e.NewValue; if (!newValue) { item.IsMouseOver = false; item.ChangeState(MenuItemState.Normal); } else { item.ChangeState(MenuItemState.Pressed); } if ((bool)e.OldValue) { if (item.IsSubmenuOpen) { item.CloseSubMenu(); } } // 冒泡处理,只处理转为选择状态的 if (newValue) { item.Owner?.OnItemIsSelected(item); } }
/// <summary> /// 递归关闭所有子窗口 /// </summary> internal void CloseSubMenu() { if (_lastSelected != null) { _lastSelected.CloseSubMenu(); _lastSelected = null; } if (IsSubmenuOpen) { IsSubmenuOpen = false; } }