void MenuItemNew_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { MenuItemNew curItem = sender as MenuItemNew; System.Diagnostics.Debug.WriteLine("Role = " + curItem.Role); Path pth = e.OriginalSource as Path; if (pth == null) { return; } DependencyObject parent = VisualTreeHelper.GetParent(pth); while (parent as MenuItemNew == null) { parent = VisualTreeHelper.GetParent(parent); } MenuItemNew actualSource = parent as MenuItemNew; if (actualSource.Role == MenuItemRole.TopLevelHeader) { IsExpanderClicked = !IsExpanderClicked; actualSource.CoerceValue(MenuItemNew.IsSubmenuOpenProperty); } if (curItem.Role == MenuItemRole.SubmenuHeader) { IsExpanderClicked = !IsExpanderClicked; curItem.CoerceValue(MenuItemNew.IsSubmenuOpenProperty); } }
private static object CoerceIsSubmenuOpen(DependencyObject d, object value) { MenuItemNew item = (MenuItemNew)d; if ((bool)value) { if (item.IsMouseOver) { System.Diagnostics.Debug.WriteLine(item.IsExpanderClicked.ToString()); return(item.IsExpanderClicked); } if (!item.IsLoaded) { item.Loaded += (s, e) => { Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Input, new DispatcherOperationCallback(delegate(object param) { item.CoerceValue(MenuItemNew.IsSubmenuOpenProperty); return(null); }), null); }; return(false); } } if (item.IsExpanderClicked) { return(true); } return(value); }