Пример #1
0
        //TODO: Menu needs too long to render if there are too many items (> 20000).
        void contextMenu_Opened(object sender, RoutedEventArgs e)
        {
            contextMenu.Items.Clear();
            contextMenu.ItemTemplate         = ItemTemplate;
            contextMenu.ItemTemplateSelector = ItemTemplateSelector;

            //    List<MenuItem> menuItems = new List<MenuItem>();
            foreach (object item in Items)
            {
                if (!(item is MenuItem) && !(item is Separator))
                {
                    RibbonMenuItem menuItem = new RibbonMenuItem();
                    menuItem.DataContext = item;
                    BreadcrumbItem bi = item as BreadcrumbItem;
                    if (bi == null)
                    {
                        BreadcrumbItem parent = TemplatedParent as BreadcrumbItem;
                        if (parent != null)
                        {
                            bi = parent.ContainerFromItem(item);
                        }
                    }
                    if (bi != null)
                    {
                        menuItem.Header = bi.TraceValue;
                    }

                    Image image = new Image();
                    image.Source = bi != null ? bi.Image : null;
                    image.SnapsToDevicePixels = true;
                    image.Stretch             = Stretch.Fill;
                    image.VerticalAlignment   = VerticalAlignment.Center;
                    image.HorizontalAlignment = HorizontalAlignment.Center;
                    image.Width  = 16;
                    image.Height = 16;

                    menuItem.Icon = image;

                    menuItem.Click += new RoutedEventHandler(item_Click);
                    if (item != null && item.Equals(SelectedItem))
                    {
                        menuItem.FontWeight = FontWeights.Bold;
                    }
                    menuItem.ItemTemplate         = ItemTemplate;
                    menuItem.ItemTemplateSelector = ItemTemplateSelector;
                    contextMenu.Items.Add(menuItem);
                }
                else
                {
                    contextMenu.Items.Add(item);
                }
            }
            contextMenu.Placement       = PlacementMode.Relative;
            contextMenu.PlacementTarget = dropDownBtn;
            contextMenu.VerticalOffset  = dropDownBtn.ActualHeight;
        }
Пример #2
0
        void rItem_MouseEnter(object sender, MouseEventArgs e)
        {
            RibbonMenuItem item = sender as RibbonMenuItem;

            if (item.HasItems)
            {
                selectedItem = item;
                EnsureTimer().Start();
            }
        }
Пример #3
0
        protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
        {
            base.PrepareContainerForItemOverride(element, item);
            RibbonMenuItem rItem = item as RibbonMenuItem;

            if (rItem != null)
            {
                rItem.MouseEnter += new MouseEventHandler(rItem_MouseEnter);
                rItem.MouseLeave += new MouseEventHandler(rItem_MouseLeave);
            }
        }
Пример #4
0
        void rItem_MouseLeave(object sender, MouseEventArgs e)
        {
            if (timer != null)
            {
                timer.Stop();
            }
            selectedItem = null;
            RibbonMenuItem item = sender as RibbonMenuItem;

            item.IsSubmenuOpen = false;
        }
Пример #5
0
        void timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            timer.Stop();
            RibbonMenuItem item = selectedItem;

            if (item != null)
            {
                MyFunc d = delegate() { item.IsSubmenuOpen = true; };
                this.Dispatcher.BeginInvoke(d);
            }
        }