1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Controls.Primitives;
- using System.Windows.Input;
- using HandyControl.Data;
- using HandyControl.Data.Enum;
- namespace HandyControl.Controls;
- public class SplitButton : ButtonBase
- {
- public static readonly DependencyProperty HitModeProperty = DependencyProperty.Register(
- nameof(HitMode), typeof(HitMode), typeof(SplitButton), new PropertyMetadata(default(HitMode)));
- public HitMode HitMode
- {
- get => (HitMode) GetValue(HitModeProperty);
- set => SetValue(HitModeProperty, value);
- }
- public static readonly DependencyProperty MaxDropDownHeightProperty = DependencyProperty.Register(
- nameof(MaxDropDownHeight), typeof(double), typeof(SplitButton), new PropertyMetadata(SystemParameters.PrimaryScreenHeight / 3.0));
- public double MaxDropDownHeight
- {
- get => (double) GetValue(MaxDropDownHeightProperty);
- set => SetValue(MaxDropDownHeightProperty, value);
- }
- public static readonly DependencyProperty IsDropDownOpenProperty = DependencyProperty.Register(
- nameof(IsDropDownOpen), typeof(bool), typeof(SplitButton), new PropertyMetadata(ValueBoxes.FalseBox));
- public bool IsDropDownOpen
- {
- get => (bool) GetValue(IsDropDownOpenProperty);
- set => SetValue(IsDropDownOpenProperty, ValueBoxes.BooleanBox(value));
- }
- public static readonly DependencyProperty DropDownContentProperty = DependencyProperty.Register(
- nameof(DropDownContent), typeof(object), typeof(SplitButton), new PropertyMetadata(default(object)));
- public object DropDownContent
- {
- get => GetValue(DropDownContentProperty);
- set => SetValue(DropDownContentProperty, value);
- }
- public SplitButton()
- {
- AddHandler(MenuItem.ClickEvent, new RoutedEventHandler(ItemsOnClick));
- }
- private void ItemsOnClick(object sender, RoutedEventArgs e)
- {
- if (e.OriginalSource is MenuItem)
- {
- SetCurrentValue(IsDropDownOpenProperty, ValueBoxes.FalseBox);
- }
- }
- protected override void OnPreviewMouseLeftButtonDown(MouseButtonEventArgs e)
- {
- base.OnPreviewMouseLeftButtonDown(e);
- if (HitMode == HitMode.Hover)
- {
- e.Handled = true;
- }
- }
- protected override void OnMouseEnter(MouseEventArgs e)
- {
- base.OnMouseEnter(e);
- if (HitMode == HitMode.Hover)
- {
- SetCurrentValue(IsDropDownOpenProperty, ValueBoxes.TrueBox);
- }
- }
- }
|