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);
        }