82 lines
2.7 KiB
C#
82 lines
2.7 KiB
C#
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(
|
|
"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(
|
|
"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(
|
|
"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(
|
|
"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);
|
|
}
|
|
}
|
|
}
|
|
}
|