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();
+ }
+ }
+}