private static void OnMouseButtonDown(Object sender, MouseButtonEventArgs e) { SplitButton splitButton = sender as SplitButton; if (!splitButton.IsKeyboardFocusWithin) { splitButton.Focus(); return; } if (Mouse.Captured == splitButton && e.OriginalSource == splitButton) { splitButton.CloseSubmenu(); return; } if (e.Source is MenuItem) { MenuItem menuItem = e.Source as MenuItem; if (menuItem != null) { if (!menuItem.HasItems) { splitButton.CloseSubmenu(); menuItem.RaiseEvent(new RoutedEventArgs(MenuItem.ClickEvent, menuItem)); } } } }
private static void OnMenuItemClick(Object sender, RoutedEventArgs e) { SplitButton splitButton = sender as SplitButton; MenuItem menuItem = e.OriginalSource as MenuItem; // To make the ButtonClickEvent get fired as we expected, you should mark the ClickEvent // as handled to prevent the event from poping up to the button portion of the SplitButton. if (menuItem != null && !typeof(MenuItem).IsAssignableFrom(menuItem.Parent.GetType())) { e.Handled = true; } if (menuItem != null && splitButton != null) { if (splitButton.IsSubmenuOpen) { splitButton.CloseSubmenu(); } } }