From 1b49c516c32cdfe2081621809fb682fa876204d5 Mon Sep 17 00:00:00 2001 From: NaBian <836904362@qq.com> Date: Thu, 5 Sep 2019 00:14:50 +0800 Subject: [PATCH] add SplitButtonItem --- .../Controls/Button/SplitButton.cs | 18 ------- .../Button/SplitButton/SplitButton.cs | 49 +++++++++++++++++++ .../Button/SplitButton/SplitButtonItem.cs | 9 ++++ .../HandyControl_Shared/Controls/Rate/Rate.cs | 22 ++------- .../HandyControl_Shared.projitems | 11 ++++- .../Themes/Basic/Converters.xaml | 2 + .../Converter/CornerRadiusSplitConverter.cs | 33 +++++++++++++ .../Converter/ThicknessSplitConverter.cs | 33 +++++++++++++ 8 files changed, 141 insertions(+), 36 deletions(-) delete mode 100644 src/Shared/HandyControl_Shared/Controls/Button/SplitButton.cs create mode 100644 src/Shared/HandyControl_Shared/Controls/Button/SplitButton/SplitButton.cs create mode 100644 src/Shared/HandyControl_Shared/Controls/Button/SplitButton/SplitButtonItem.cs create mode 100644 src/Shared/HandyControl_Shared/Tools/Converter/CornerRadiusSplitConverter.cs create mode 100644 src/Shared/HandyControl_Shared/Tools/Converter/ThicknessSplitConverter.cs diff --git a/src/Shared/HandyControl_Shared/Controls/Button/SplitButton.cs b/src/Shared/HandyControl_Shared/Controls/Button/SplitButton.cs deleted file mode 100644 index e3ad2892..00000000 --- a/src/Shared/HandyControl_Shared/Controls/Button/SplitButton.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System.Windows; -using System.Windows.Controls.Primitives; -using HandyControl.Data.Enum; - -namespace HandyControl.Controls -{ - public class SplitButton : ButtonBase - { - public static readonly DependencyProperty HitModeProperty = DependencyProperty.Register( - "HitMode", typeof(MouseHitMode), typeof(SplitButton), new PropertyMetadata(default(MouseHitMode))); - - public MouseHitMode HitMode - { - get => (MouseHitMode) GetValue(HitModeProperty); - set => SetValue(HitModeProperty, value); - } - } -} diff --git a/src/Shared/HandyControl_Shared/Controls/Button/SplitButton/SplitButton.cs b/src/Shared/HandyControl_Shared/Controls/Button/SplitButton/SplitButton.cs new file mode 100644 index 00000000..fa3f8f57 --- /dev/null +++ b/src/Shared/HandyControl_Shared/Controls/Button/SplitButton/SplitButton.cs @@ -0,0 +1,49 @@ +using System.Windows; +using System.Windows.Controls; +using HandyControl.Data.Enum; + +namespace HandyControl.Controls +{ + public class SplitButton : ItemsControl + { + public static readonly DependencyProperty HitModeProperty = DependencyProperty.Register( + "HitMode", typeof(MouseHitMode), typeof(SplitButton), new PropertyMetadata(default(MouseHitMode))); + + public MouseHitMode HitMode + { + get => (MouseHitMode) GetValue(HitModeProperty); + set => SetValue(HitModeProperty, value); + } + + public static readonly DependencyProperty ContentProperty = DependencyProperty.Register( + "Content", typeof(object), typeof(SplitButton), new PropertyMetadata(default(object))); + + public object Content + { + get => GetValue(ContentProperty); + set => SetValue(ContentProperty, value); + } + + public static readonly DependencyProperty ContentTemplateProperty = DependencyProperty.Register( + "ContentTemplate", typeof(DataTemplate), typeof(SplitButton), new PropertyMetadata(default(DataTemplate))); + + public DataTemplate ContentTemplate + { + get => (DataTemplate) GetValue(ContentTemplateProperty); + set => SetValue(ContentTemplateProperty, 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); + } + + protected override bool IsItemItsOwnContainerOverride(object item) => item is SplitButtonItem; + + protected override DependencyObject GetContainerForItemOverride() => new SplitButtonItem(); + } +} diff --git a/src/Shared/HandyControl_Shared/Controls/Button/SplitButton/SplitButtonItem.cs b/src/Shared/HandyControl_Shared/Controls/Button/SplitButton/SplitButtonItem.cs new file mode 100644 index 00000000..cbdf9d80 --- /dev/null +++ b/src/Shared/HandyControl_Shared/Controls/Button/SplitButton/SplitButtonItem.cs @@ -0,0 +1,9 @@ +using System.Windows.Controls; + +namespace HandyControl.Controls +{ + public class SplitButtonItem : MenuItem + { + + } +} diff --git a/src/Shared/HandyControl_Shared/Controls/Rate/Rate.cs b/src/Shared/HandyControl_Shared/Controls/Rate/Rate.cs index 37453c8b..45665b8d 100644 --- a/src/Shared/HandyControl_Shared/Controls/Rate/Rate.cs +++ b/src/Shared/HandyControl_Shared/Controls/Rate/Rate.cs @@ -132,11 +132,8 @@ namespace HandyControl.Controls set => SetValue(IsReadOnlyProperty, value); } - private void RateItemValueChanged(object sender, RoutedEventArgs e) - { - Value = - (from RateItem item in Items where item.IsSelected select item.IsHalf ? 0.5 : 1).Sum(); - } + private void RateItemValueChanged(object sender, RoutedEventArgs e) => + Value = (from RateItem item in Items where item.IsSelected select item.IsHalf ? 0.5 : 1).Sum(); private void RateItemSelectedChanged(object sender, RoutedEventArgs e) { @@ -163,15 +160,9 @@ namespace HandyControl.Controls } } - protected override bool IsItemItsOwnContainerOverride(object item) - { - return item is RateItem; - } + protected override bool IsItemItsOwnContainerOverride(object item) => item is RateItem; - protected override DependencyObject GetContainerForItemOverride() - { - return new RateItem(); - } + protected override DependencyObject GetContainerForItemOverride() => new RateItem(); private void OnApplyTemplateInternal() { @@ -242,9 +233,6 @@ namespace HandyControl.Controls } } - public void Reset() - { - Value = DefaultValue; - } + public void Reset() => Value = DefaultValue; } } \ No newline at end of file diff --git a/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems b/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems index 898fddd7..83b67bcf 100644 --- a/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems +++ b/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems @@ -21,7 +21,8 @@ - + + @@ -40,8 +41,10 @@ + + @@ -860,4 +863,10 @@ + + + Designer + MSBuild:Compile + + \ No newline at end of file diff --git a/src/Shared/HandyControl_Shared/Themes/Basic/Converters.xaml b/src/Shared/HandyControl_Shared/Themes/Basic/Converters.xaml index ac9c5fda..cb0c9fda 100644 --- a/src/Shared/HandyControl_Shared/Themes/Basic/Converters.xaml +++ b/src/Shared/HandyControl_Shared/Themes/Basic/Converters.xaml @@ -20,5 +20,7 @@ + + \ No newline at end of file diff --git a/src/Shared/HandyControl_Shared/Tools/Converter/CornerRadiusSplitConverter.cs b/src/Shared/HandyControl_Shared/Tools/Converter/CornerRadiusSplitConverter.cs new file mode 100644 index 00000000..7ae70d8f --- /dev/null +++ b/src/Shared/HandyControl_Shared/Tools/Converter/CornerRadiusSplitConverter.cs @@ -0,0 +1,33 @@ +using System; +using System.Globalization; +using System.Windows; +using System.Windows.Data; + +namespace HandyControl.Tools.Converter +{ + public class CornerRadiusSplitConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (value is CornerRadius cornerRadius) + { + if (parameter is string str) + { + var arr = str.Split(','); + if (arr.Length != 4) return cornerRadius; + + return new CornerRadius(arr[0].Equals("1") ? cornerRadius.TopLeft : 0, + arr[1].Equals("1") ? cornerRadius.TopRight : 0, + arr[1].Equals("1") ? cornerRadius.BottomRight : 0, + arr[1].Equals("1") ? cornerRadius.BottomLeft : 0); + } + } + return value; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} diff --git a/src/Shared/HandyControl_Shared/Tools/Converter/ThicknessSplitConverter.cs b/src/Shared/HandyControl_Shared/Tools/Converter/ThicknessSplitConverter.cs new file mode 100644 index 00000000..f024dc3a --- /dev/null +++ b/src/Shared/HandyControl_Shared/Tools/Converter/ThicknessSplitConverter.cs @@ -0,0 +1,33 @@ +using System; +using System.Globalization; +using System.Windows; +using System.Windows.Data; + +namespace HandyControl.Tools.Converter +{ + public class ThicknessSplitConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (value is Thickness cornerRadius) + { + if (parameter is string str) + { + var arr = str.Split(','); + if (arr.Length != 4) return cornerRadius; + + return new CornerRadius(arr[0].Equals("1") ? cornerRadius.Left : 0, + arr[1].Equals("1") ? cornerRadius.Top : 0, + arr[1].Equals("1") ? cornerRadius.Right : 0, + arr[1].Equals("1") ? cornerRadius.Bottom : 0); + } + } + return value; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } +}