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 OnIsSubmenuOpenChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) { SplitButton splitButton = sender as SplitButton; if ((Boolean)e.NewValue) { if (Mouse.Captured != splitButton) { Mouse.Capture(splitButton, CaptureMode.SubTree); } } else { if (Mouse.Captured == splitButton) { Mouse.Capture(null); } if (splitButton.IsKeyboardFocused) { splitButton.Focus(); } } }