From a54fc6986922c0bc03b4bfff2c0450724a5029e0 Mon Sep 17 00:00:00 2001
From: NaBian <836904362@qq.com>
Date: Tue, 3 Sep 2019 23:27:19 +0800
Subject: [PATCH 1/4] init branch
---
.../HandyControlDemo_Core30.csproj | 3 ++
.../HandyControlDemo_Net_40.csproj | 3 ++
.../HandyControlDemo_Net_GE45.csproj | 3 ++
.../Data/MessageToken.cs | 2 +
.../Data/MessageToken.tt | 3 +-
.../HandyControlDemo_Shared.projitems | 7 +++
.../Properties/Langs/Lang.Designer.cs | 9 ++++
.../Properties/Langs/Lang.en.resx | 3 ++
.../Properties/Langs/Lang.fa.resx | 3 ++
.../Properties/Langs/Lang.fr.resx | 3 ++
.../Properties/Langs/Lang.resx | 3 ++
.../Img/LeftMainContent/SplitButton_16x.png | Bin 0 -> 311 bytes
.../Controls/SplitButtonDemoCtl.xaml | 6 +++
.../Controls/SplitButtonDemoCtl.xaml.cs | 10 ++++
.../UserControl/Main/LeftMainContent.xaml | 7 ++-
.../Controls/Button/SplitButton.cs | 18 +++++++
.../Other/TransitioningContentControl.cs | 29 +++++++++--
.../Data/Enum/MouseHitMode.cs | 8 +++
.../HandyControl_Shared.projitems | 10 ++++
.../Styles/Base/SplitButtonBaseStyle.xaml | 14 ++++++
.../Themes/Styles/SplitButton.xaml | 10 ++++
.../Themes/Styles/Style.xaml | 1 +
.../Styles/TransitioningContentControl.xaml | 46 +++++++++---------
23 files changed, 170 insertions(+), 31 deletions(-)
create mode 100644 src/Shared/HandyControlDemo_Shared/Resources/Img/LeftMainContent/SplitButton_16x.png
create mode 100644 src/Shared/HandyControlDemo_Shared/UserControl/Controls/SplitButtonDemoCtl.xaml
create mode 100644 src/Shared/HandyControlDemo_Shared/UserControl/Controls/SplitButtonDemoCtl.xaml.cs
create mode 100644 src/Shared/HandyControl_Shared/Controls/Button/SplitButton.cs
create mode 100644 src/Shared/HandyControl_Shared/Data/Enum/MouseHitMode.cs
create mode 100644 src/Shared/HandyControl_Shared/Themes/Styles/Base/SplitButtonBaseStyle.xaml
create mode 100644 src/Shared/HandyControl_Shared/Themes/Styles/SplitButton.xaml
diff --git a/src/Core_30/HandyControlDemo_Core_30/HandyControlDemo_Core30.csproj b/src/Core_30/HandyControlDemo_Core_30/HandyControlDemo_Core30.csproj
index ad7fbab1..a463f64c 100644
--- a/src/Core_30/HandyControlDemo_Core_30/HandyControlDemo_Core30.csproj
+++ b/src/Core_30/HandyControlDemo_Core_30/HandyControlDemo_Core30.csproj
@@ -417,6 +417,9 @@
Resources\Img\thumbs_up.png
+
+ Resources\Img\SplitButton_16x.png
+
diff --git a/src/Net_40/HandyControlDemo_Net_40/HandyControlDemo_Net_40.csproj b/src/Net_40/HandyControlDemo_Net_40/HandyControlDemo_Net_40.csproj
index ba107c4e..3c9f4539 100644
--- a/src/Net_40/HandyControlDemo_Net_40/HandyControlDemo_Net_40.csproj
+++ b/src/Net_40/HandyControlDemo_Net_40/HandyControlDemo_Net_40.csproj
@@ -429,6 +429,9 @@
TextTemplatingFileGenerator
MessageToken.cs
+
+ Resources\Img\LeftMainContent\SplitButton_16x.png
+
Resources\Img\LeftMainContent\thumbs_up.png
diff --git a/src/Net_GE45/HandyControlDemo_Net_GE45/HandyControlDemo_Net_GE45.csproj b/src/Net_GE45/HandyControlDemo_Net_GE45/HandyControlDemo_Net_GE45.csproj
index 2287cbee..dfa44c93 100644
--- a/src/Net_GE45/HandyControlDemo_Net_GE45/HandyControlDemo_Net_GE45.csproj
+++ b/src/Net_GE45/HandyControlDemo_Net_GE45/HandyControlDemo_Net_GE45.csproj
@@ -492,6 +492,9 @@
TextTemplatingFileGenerator
MessageToken.cs
+
+ Resources\Img\LeftMainContent\SplitButton_16x.png
+
Resources\Img\LeftMainContent\thumbs_up.png
diff --git a/src/Shared/HandyControlDemo_Shared/Data/MessageToken.cs b/src/Shared/HandyControlDemo_Shared/Data/MessageToken.cs
index 3ffee119..7f8f0df7 100644
--- a/src/Shared/HandyControlDemo_Shared/Data/MessageToken.cs
+++ b/src/Shared/HandyControlDemo_Shared/Data/MessageToken.cs
@@ -116,6 +116,8 @@
public static readonly string FloatingBlockDemoCtl = nameof(FloatingBlockDemoCtl);
+ public static readonly string SplitButtonDemoCtl = nameof(SplitButtonDemoCtl);
+
public static readonly string ButtonDemoCtl = nameof(ButtonDemoCtl);
public static readonly string RepeatButtonDemoCtl = nameof(RepeatButtonDemoCtl);
diff --git a/src/Shared/HandyControlDemo_Shared/Data/MessageToken.tt b/src/Shared/HandyControlDemo_Shared/Data/MessageToken.tt
index 2978eea6..b2e1f283 100644
--- a/src/Shared/HandyControlDemo_Shared/Data/MessageToken.tt
+++ b/src/Shared/HandyControlDemo_Shared/Data/MessageToken.tt
@@ -60,7 +60,8 @@ var controlList = new List
"HoneycombPanelDemoCtl",
"SpriteDemoCtl",
"NotificationDemoCtl",
- "FloatingBlockDemoCtl"
+ "FloatingBlockDemoCtl",
+ "SplitButtonDemoCtl"
};
var styleList = new List
{
diff --git a/src/Shared/HandyControlDemo_Shared/HandyControlDemo_Shared.projitems b/src/Shared/HandyControlDemo_Shared/HandyControlDemo_Shared.projitems
index cddc13cc..a1c92435 100644
--- a/src/Shared/HandyControlDemo_Shared/HandyControlDemo_Shared.projitems
+++ b/src/Shared/HandyControlDemo_Shared/HandyControlDemo_Shared.projitems
@@ -183,6 +183,9 @@
SideMenuDemoCtl.xaml
+
+ SplitButtonDemoCtl.xaml
+
SpriteDemoCtl.xaml
@@ -621,6 +624,10 @@
Designer
MSBuild:Compile
+
+ Designer
+ MSBuild:Compile
+
Designer
MSBuild:Compile
diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.Designer.cs b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.Designer.cs
index 71c11a57..a5c6c81e 100644
--- a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.Designer.cs
+++ b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.Designer.cs
@@ -1401,6 +1401,15 @@ namespace HandyControlDemo.Properties.Langs {
}
}
+ ///
+ /// 查找类似 分割按钮 的本地化字符串。
+ ///
+ public static string SplitButton {
+ get {
+ return ResourceManager.GetString("SplitButton", resourceCulture);
+ }
+ }
+
///
/// 查找类似 精灵 的本地化字符串。
///
diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.en.resx b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.en.resx
index 5114bdd6..3159b7da 100644
--- a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.en.resx
+++ b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.en.resx
@@ -663,4 +663,7 @@
FloatingBlock
+
+ SplitButton
+
\ No newline at end of file
diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.fa.resx b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.fa.resx
index 07d9c0ff..5c85daba 100644
--- a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.fa.resx
+++ b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.fa.resx
@@ -663,4 +663,7 @@
FloatingBlock
+
+ SplitButton
+
\ No newline at end of file
diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.fr.resx b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.fr.resx
index ff7f70f8..6963d7af 100644
--- a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.fr.resx
+++ b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.fr.resx
@@ -663,4 +663,7 @@
FloatingBlock
+
+ SplitButton
+
\ No newline at end of file
diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.resx b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.resx
index c3c1bec7..4da16852 100644
--- a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.resx
+++ b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.resx
@@ -663,4 +663,7 @@
漂浮块
+
+ 分割按钮
+
\ No newline at end of file
diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Img/LeftMainContent/SplitButton_16x.png b/src/Shared/HandyControlDemo_Shared/Resources/Img/LeftMainContent/SplitButton_16x.png
new file mode 100644
index 0000000000000000000000000000000000000000..80e46664e51a8b957212d2c7646c593584db771c
GIT binary patch
literal 311
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5M?jcysy3fAQ1GRv
zi(^Pd+|kK~ea!|UF8g(*uFEvqa*9ql8P}lnL~LP#ch!;!A~FpsxtG+p8@MlE@tU?V
z<)lz+uZGd2rRs+7l{cJSmbpmx;TFSrZG|#Vc^VgA=TfW_c_`eLI3YFCFHyoux8&i0
zuOFW6TGxF3xAXK@Ui;opKKHNO{rm0aGbOR^k!4J5o|8QIGG?`X`s06c+k$32nH_g(
z63%aWy^|xfblLOQD=oT|y!eloGG8hYo8hEteC!%;14H0u$-FAFDsdIq`SsD;HOwrx`q5{an^L
HB{Ts5%%p#Q
literal 0
HcmV?d00001
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SplitButtonDemoCtl.xaml b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SplitButtonDemoCtl.xaml
new file mode 100644
index 00000000..944a9d6a
--- /dev/null
+++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SplitButtonDemoCtl.xaml
@@ -0,0 +1,6 @@
+
+
+
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SplitButtonDemoCtl.xaml.cs b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SplitButtonDemoCtl.xaml.cs
new file mode 100644
index 00000000..45ead592
--- /dev/null
+++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SplitButtonDemoCtl.xaml.cs
@@ -0,0 +1,10 @@
+namespace HandyControlDemo.UserControl
+{
+ public partial class SplitButtonDemoCtl
+ {
+ public SplitButtonDemoCtl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Main/LeftMainContent.xaml b/src/Shared/HandyControlDemo_Shared/UserControl/Main/LeftMainContent.xaml
index e5d1313c..4f903dd1 100644
--- a/src/Shared/HandyControlDemo_Shared/UserControl/Main/LeftMainContent.xaml
+++ b/src/Shared/HandyControlDemo_Shared/UserControl/Main/LeftMainContent.xaml
@@ -225,6 +225,11 @@
+
+
+
+
+
@@ -330,7 +335,7 @@
-
+
diff --git a/src/Shared/HandyControl_Shared/Controls/Button/SplitButton.cs b/src/Shared/HandyControl_Shared/Controls/Button/SplitButton.cs
new file mode 100644
index 00000000..e3ad2892
--- /dev/null
+++ b/src/Shared/HandyControl_Shared/Controls/Button/SplitButton.cs
@@ -0,0 +1,18 @@
+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/Other/TransitioningContentControl.cs b/src/Shared/HandyControl_Shared/Controls/Other/TransitioningContentControl.cs
index 64c0cf75..fe84b94a 100644
--- a/src/Shared/HandyControl_Shared/Controls/Other/TransitioningContentControl.cs
+++ b/src/Shared/HandyControl_Shared/Controls/Other/TransitioningContentControl.cs
@@ -4,6 +4,7 @@ using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
+using System.Windows.Markup;
using System.Windows.Media.Animation;
using HandyControl.Data;
using HandyControl.Tools;
@@ -14,7 +15,8 @@ namespace HandyControl.Controls
[TemplateVisualState(GroupName = PresentationGroup, Name = DefaultTransitionState)]
[TemplatePart(Name = PreviousContentPresentationSitePartName, Type = typeof(ContentControl))]
[TemplatePart(Name = CurrentContentPresentationSitePartName, Type = typeof(ContentControl))]
- public class TransitioningContentControl : ContentControl
+ [ContentProperty("Content")]
+ public class TransitioningContentControl : Control
{
private Storyboard _currentTransition;
@@ -76,11 +78,28 @@ namespace HandyControl.Controls
VisualStateManager.GoToState(this, Transition, true);
}
- protected override void OnContentChanged(object oldContent, object newContent)
- {
- base.OnContentChanged(oldContent, newContent);
+ public static readonly DependencyProperty ContentProperty = DependencyProperty.Register(
+ "Content", typeof(object), typeof(TransitioningContentControl), new PropertyMetadata(default(object), OnContentChanged));
- StartTransition(oldContent, newContent);
+ private static void OnContentChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
+ {
+ var ctl = (TransitioningContentControl) d;
+ ctl.StartTransition(e.OldValue, e.NewValue);
+ }
+
+ public static readonly DependencyProperty ContentTemplateProperty = DependencyProperty.Register(
+ "ContentTemplate", typeof(DataTemplate), typeof(TransitioningContentControl), new PropertyMetadata(default(DataTemplate)));
+
+ public DataTemplate ContentTemplate
+ {
+ get => (DataTemplate) GetValue(ContentTemplateProperty);
+ set => SetValue(ContentTemplateProperty, value);
+ }
+
+ public object Content
+ {
+ get => GetValue(ContentProperty);
+ set => SetValue(ContentProperty, value);
}
[SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "newContent", Justification = "Should be used in the future.")]
diff --git a/src/Shared/HandyControl_Shared/Data/Enum/MouseHitMode.cs b/src/Shared/HandyControl_Shared/Data/Enum/MouseHitMode.cs
new file mode 100644
index 00000000..6232328a
--- /dev/null
+++ b/src/Shared/HandyControl_Shared/Data/Enum/MouseHitMode.cs
@@ -0,0 +1,8 @@
+namespace HandyControl.Data.Enum
+{
+ public enum MouseHitMode
+ {
+ Click,
+ Hover
+ }
+}
diff --git a/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems b/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems
index 6aa8a170..898fddd7 100644
--- a/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems
+++ b/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems
@@ -21,6 +21,7 @@
+
@@ -34,6 +35,7 @@
+
@@ -390,6 +392,10 @@
Designer
MSBuild:Compile
+
+ Designer
+ MSBuild:Compile
+
Designer
MSBuild:Compile
@@ -778,6 +784,10 @@
Designer
MSBuild:Compile
+
+ Designer
+ MSBuild:Compile
+
MSBuild:Compile
Designer
diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/Base/SplitButtonBaseStyle.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Base/SplitButtonBaseStyle.xaml
new file mode 100644
index 00000000..273e9fe9
--- /dev/null
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/Base/SplitButtonBaseStyle.xaml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/SplitButton.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/SplitButton.xaml
new file mode 100644
index 00000000..f72a35d0
--- /dev/null
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/SplitButton.xaml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/Style.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Style.xaml
index aaa1a79c..46347ec2 100644
--- a/src/Shared/HandyControl_Shared/Themes/Styles/Style.xaml
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/Style.xaml
@@ -74,6 +74,7 @@
+
\ No newline at end of file
diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/TransitioningContentControl.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/TransitioningContentControl.xaml
index 81fb9f6a..0e238931 100644
--- a/src/Shared/HandyControl_Shared/Themes/Styles/TransitioningContentControl.xaml
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/TransitioningContentControl.xaml
@@ -11,7 +11,7 @@
-
+
@@ -76,29 +76,27 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 2/4] 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();
+ }
+ }
+}
From 61c5044b6f1eca75c1735fbb90c04aa8d91a20b2 Mon Sep 17 00:00:00 2001
From: NaBian <836904362@qq.com>
Date: Tue, 10 Sep 2019 00:33:12 +0800
Subject: [PATCH 3/4] add style and demo
---
.../Themes/Styles/Base/ComboBoxBaseStyle.xaml | 3 +-
.../Themes/Styles/Base/ComboBoxBaseStyle.xaml | 3 +-
.../Themes/Styles/Base/ComboBoxBaseStyle.xaml | 3 +-
.../HandyControlDemo_Shared/App.xaml.cs | 10 +++
.../HandyControlDemo_Shared.projitems | 2 +
.../Resources/Themes/Styles/Style.xaml | 5 +-
.../Basic/CustomSplitButtonItem.cs | 10 +++
.../Controls/SplitButtonDemoCtl.xaml | 46 +++++++++-
.../Controls/SplitButtonDemoCtl.xaml.cs | 9 +-
.../Controls/SplitButtonDemoViewModel.cs | 17 ++++
.../ViewModel/ViewModelLocator.cs | 3 +
.../Button/SplitButton/ISplitButtonItem.cs | 6 ++
.../Button/SplitButton/SplitButton.cs | 81 ++++++++++++-----
.../Button/SplitButton/SplitButtonItem.cs | 6 +-
.../HandyControl_Shared.projitems | 1 +
.../Styles/Base/DatePickerBaseStyle.xaml | 7 +-
.../Styles/Base/DateTimePickerBaseStyle.xaml | 7 +-
.../Styles/Base/NumericUpDownBaseStyle.xaml | 9 +-
.../Styles/Base/PasswordBoxBaseStyle.xaml | 9 +-
.../Styles/Base/ProgressButtonBaseStyle.xaml | 5 +-
.../Styles/Base/SearchBarBaseStyle.xaml | 7 +-
.../Styles/Base/SplitButtonBaseStyle.xaml | 86 ++++++++++++++++++-
.../Themes/Styles/Base/TextBoxBaseStyle.xaml | 7 +-
.../Styles/Base/TimePickerBaseStyle.xaml | 7 +-
.../Themes/Styles/SplitButton.xaml | 34 +++++++-
25 files changed, 312 insertions(+), 71 deletions(-)
create mode 100644 src/Shared/HandyControlDemo_Shared/UserControl/Basic/CustomSplitButtonItem.cs
create mode 100644 src/Shared/HandyControlDemo_Shared/ViewModel/Controls/SplitButtonDemoViewModel.cs
create mode 100644 src/Shared/HandyControl_Shared/Controls/Button/SplitButton/ISplitButtonItem.cs
diff --git a/src/Core_30/HandyControl_Core_30/Themes/Styles/Base/ComboBoxBaseStyle.xaml b/src/Core_30/HandyControl_Core_30/Themes/Styles/Base/ComboBoxBaseStyle.xaml
index ec88f225..d248b76b 100644
--- a/src/Core_30/HandyControl_Core_30/Themes/Styles/Base/ComboBoxBaseStyle.xaml
+++ b/src/Core_30/HandyControl_Core_30/Themes/Styles/Base/ComboBoxBaseStyle.xaml
@@ -1,7 +1,6 @@
@@ -528,7 +527,7 @@
+
+
\ No newline at end of file
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Basic/CustomSplitButtonItem.cs b/src/Shared/HandyControlDemo_Shared/UserControl/Basic/CustomSplitButtonItem.cs
new file mode 100644
index 00000000..3dfadad9
--- /dev/null
+++ b/src/Shared/HandyControlDemo_Shared/UserControl/Basic/CustomSplitButtonItem.cs
@@ -0,0 +1,10 @@
+using System.Windows.Controls;
+using HandyControl.Controls;
+
+namespace HandyControlDemo.UserControl
+{
+ public class CustomSplitButtonItem : ComboBoxItem, ISplitButtonItem
+ {
+
+ }
+}
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SplitButtonDemoCtl.xaml b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SplitButtonDemoCtl.xaml
index 944a9d6a..58cbf87f 100644
--- a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SplitButtonDemoCtl.xaml
+++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SplitButtonDemoCtl.xaml
@@ -1,6 +1,48 @@
-
+ xmlns:hc="https://handyorg.github.io/handycontrol"
+ xmlns:langs="clr-namespace:HandyControlDemo.Properties.Langs"
+ xmlns:userControl="clr-namespace:HandyControlDemo.UserControl"
+ DataContext="{Binding SplitButtonDemo,Source={StaticResource Locator}}">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SplitButtonDemoCtl.xaml.cs b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SplitButtonDemoCtl.xaml.cs
index 45ead592..6c369070 100644
--- a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SplitButtonDemoCtl.xaml.cs
+++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SplitButtonDemoCtl.xaml.cs
@@ -1,4 +1,6 @@
-namespace HandyControlDemo.UserControl
+using System.Windows;
+
+namespace HandyControlDemo.UserControl
{
public partial class SplitButtonDemoCtl
{
@@ -6,5 +8,10 @@
{
InitializeComponent();
}
+
+ private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
+ {
+ MessageBox.Show("123");
+ }
}
}
diff --git a/src/Shared/HandyControlDemo_Shared/ViewModel/Controls/SplitButtonDemoViewModel.cs b/src/Shared/HandyControlDemo_Shared/ViewModel/Controls/SplitButtonDemoViewModel.cs
new file mode 100644
index 00000000..43a77e8f
--- /dev/null
+++ b/src/Shared/HandyControlDemo_Shared/ViewModel/Controls/SplitButtonDemoViewModel.cs
@@ -0,0 +1,17 @@
+using System;
+using GalaSoft.MvvmLight;
+using HandyControl.Controls;
+#if netle40
+using GalaSoft.MvvmLight.Command;
+#else
+using GalaSoft.MvvmLight.CommandWpf;
+# endif
+
+namespace HandyControlDemo.ViewModel
+{
+ public class SplitButtonDemoViewModel : ViewModelBase
+ {
+ public RelayCommand SelectCmd => new Lazy>(() =>
+ new RelayCommand(str => Growl.Info(str))).Value;
+ }
+}
diff --git a/src/Shared/HandyControlDemo_Shared/ViewModel/ViewModelLocator.cs b/src/Shared/HandyControlDemo_Shared/ViewModel/ViewModelLocator.cs
index d8e4b51f..3910168c 100644
--- a/src/Shared/HandyControlDemo_Shared/ViewModel/ViewModelLocator.cs
+++ b/src/Shared/HandyControlDemo_Shared/ViewModel/ViewModelLocator.cs
@@ -39,6 +39,7 @@ namespace HandyControlDemo.ViewModel
SimpleIoc.Default.Register();
SimpleIoc.Default.Register();
SimpleIoc.Default.Register();
+ SimpleIoc.Default.Register();
}
public static ViewModelLocator Instance => new Lazy(() =>
@@ -94,6 +95,8 @@ namespace HandyControlDemo.ViewModel
public NotificationDemoViewModel NotificationDemo => ServiceLocator.Current.GetInstance();
+ public SplitButtonDemoViewModel SplitButtonDemo => ServiceLocator.Current.GetInstance();
+
#endregion
}
}
\ No newline at end of file
diff --git a/src/Shared/HandyControl_Shared/Controls/Button/SplitButton/ISplitButtonItem.cs b/src/Shared/HandyControl_Shared/Controls/Button/SplitButton/ISplitButtonItem.cs
new file mode 100644
index 00000000..c0df5384
--- /dev/null
+++ b/src/Shared/HandyControl_Shared/Controls/Button/SplitButton/ISplitButtonItem.cs
@@ -0,0 +1,6 @@
+namespace HandyControl.Controls
+{
+ public interface ISplitButtonItem
+ {
+ }
+}
diff --git a/src/Shared/HandyControl_Shared/Controls/Button/SplitButton/SplitButton.cs b/src/Shared/HandyControl_Shared/Controls/Button/SplitButton/SplitButton.cs
index fa3f8f57..6995ab89 100644
--- a/src/Shared/HandyControl_Shared/Controls/Button/SplitButton/SplitButton.cs
+++ b/src/Shared/HandyControl_Shared/Controls/Button/SplitButton/SplitButton.cs
@@ -1,11 +1,19 @@
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 : ItemsControl
+ [TemplatePart(Name = ElementArrow, Type = typeof(ToggleButton))]
+ public class SplitButton : ButtonBase
{
+ private const string ElementArrow = "PART_Arrow";
+
+ private ToggleButton _toggleArrow;
+
public static readonly DependencyProperty HitModeProperty = DependencyProperty.Register(
"HitMode", typeof(MouseHitMode), typeof(SplitButton), new PropertyMetadata(default(MouseHitMode)));
@@ -15,24 +23,6 @@ namespace HandyControl.Controls
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));
@@ -42,8 +32,57 @@ namespace HandyControl.Controls
set => SetValue(MaxDropDownHeightProperty, value);
}
- protected override bool IsItemItsOwnContainerOverride(object item) => item is SplitButtonItem;
+ public static readonly DependencyProperty IsDropDownOpenProperty = DependencyProperty.Register(
+ "IsDropDownOpen", typeof(bool), typeof(SplitButton), new PropertyMetadata(ValueBoxes.FalseBox));
- protected override DependencyObject GetContainerForItemOverride() => new SplitButtonItem();
+ public bool IsDropDownOpen
+ {
+ get => (bool) GetValue(IsDropDownOpenProperty);
+ set => SetValue(IsDropDownOpenProperty, 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));
+ }
+
+ public override void OnApplyTemplate()
+ {
+ base.OnApplyTemplate();
+
+ _toggleArrow = GetTemplateChild(ElementArrow) as ToggleButton;
+ }
+
+ private void ItemsOnClick(object sender, RoutedEventArgs e)
+ {
+ if (e.OriginalSource is ISplitButtonItem)
+ {
+ SetCurrentValue(IsDropDownOpenProperty, false);
+ }
+ }
+
+ protected override void OnPreviewMouseLeftButtonDown(MouseButtonEventArgs e)
+ {
+ base.OnPreviewMouseLeftButtonDown(e);
+
+ if (HitMode == MouseHitMode.Hover)
+ {
+ e.Handled = true;
+ }
+ else if (_toggleArrow != null && _toggleArrow.IsMouseOver)
+ {
+ SetCurrentValue(IsDropDownOpenProperty, _toggleArrow.IsChecked != true);
+ e.Handled = true;
+ }
+ }
}
}
diff --git a/src/Shared/HandyControl_Shared/Controls/Button/SplitButton/SplitButtonItem.cs b/src/Shared/HandyControl_Shared/Controls/Button/SplitButton/SplitButtonItem.cs
index cbdf9d80..8f4d6b58 100644
--- a/src/Shared/HandyControl_Shared/Controls/Button/SplitButton/SplitButtonItem.cs
+++ b/src/Shared/HandyControl_Shared/Controls/Button/SplitButton/SplitButtonItem.cs
@@ -2,8 +2,8 @@
namespace HandyControl.Controls
{
- public class SplitButtonItem : MenuItem
+ public class SplitButtonItem : MenuItem, ISplitButtonItem
{
-
+
}
-}
+}
\ 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 83b67bcf..ae13a98c 100644
--- a/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems
+++ b/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems
@@ -21,6 +21,7 @@
+
diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/Base/DatePickerBaseStyle.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Base/DatePickerBaseStyle.xaml
index ce60374a..894b03ad 100644
--- a/src/Shared/HandyControl_Shared/Themes/Styles/Base/DatePickerBaseStyle.xaml
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/Base/DatePickerBaseStyle.xaml
@@ -1,7 +1,6 @@
@@ -183,13 +182,13 @@
@@ -351,7 +350,7 @@
-
+
diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/Base/DateTimePickerBaseStyle.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Base/DateTimePickerBaseStyle.xaml
index 2eb9d802..e9ad4187 100644
--- a/src/Shared/HandyControl_Shared/Themes/Styles/Base/DateTimePickerBaseStyle.xaml
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/Base/DateTimePickerBaseStyle.xaml
@@ -1,7 +1,6 @@
@@ -162,13 +161,13 @@
@@ -330,7 +329,7 @@
-
+
diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/Base/NumericUpDownBaseStyle.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Base/NumericUpDownBaseStyle.xaml
index b01ad9fd..ff1162ae 100644
--- a/src/Shared/HandyControl_Shared/Themes/Styles/Base/NumericUpDownBaseStyle.xaml
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/Base/NumericUpDownBaseStyle.xaml
@@ -1,8 +1,7 @@
+ xmlns:interactivity="clr-namespace:HandyControl.Interactivity">
@@ -131,12 +130,12 @@
@@ -270,7 +269,7 @@
-
+
diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/Base/PasswordBoxBaseStyle.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Base/PasswordBoxBaseStyle.xaml
index 6028041e..e06d7e23 100644
--- a/src/Shared/HandyControl_Shared/Themes/Styles/Base/PasswordBoxBaseStyle.xaml
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/Base/PasswordBoxBaseStyle.xaml
@@ -1,7 +1,6 @@
@@ -115,7 +114,7 @@
@@ -291,7 +290,7 @@
-
+
@@ -301,7 +300,7 @@
-
+
diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/Base/ProgressButtonBaseStyle.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Base/ProgressButtonBaseStyle.xaml
index 5f1b92ff..c5606579 100644
--- a/src/Shared/HandyControl_Shared/Themes/Styles/Base/ProgressButtonBaseStyle.xaml
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/Base/ProgressButtonBaseStyle.xaml
@@ -1,7 +1,6 @@
+ xmlns:controls="clr-namespace:HandyControl.Controls">
@@ -32,7 +31,7 @@
-
+
diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/Base/SearchBarBaseStyle.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Base/SearchBarBaseStyle.xaml
index f79bfddd..5f40254b 100644
--- a/src/Shared/HandyControl_Shared/Themes/Styles/Base/SearchBarBaseStyle.xaml
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/Base/SearchBarBaseStyle.xaml
@@ -1,7 +1,6 @@
@@ -109,13 +108,13 @@
@@ -249,7 +248,7 @@
-
+
diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/Base/SplitButtonBaseStyle.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Base/SplitButtonBaseStyle.xaml
index 273e9fe9..9da8e511 100644
--- a/src/Shared/HandyControl_Shared/Themes/Styles/Base/SplitButtonBaseStyle.xaml
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/Base/SplitButtonBaseStyle.xaml
@@ -3,12 +3,92 @@
xmlns:controls="clr-namespace:HandyControl.Controls">
-
+
+
-
\ No newline at end of file
diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/Base/TextBoxBaseStyle.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Base/TextBoxBaseStyle.xaml
index f91ce695..a4a2fa47 100644
--- a/src/Shared/HandyControl_Shared/Themes/Styles/Base/TextBoxBaseStyle.xaml
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/Base/TextBoxBaseStyle.xaml
@@ -1,7 +1,6 @@
@@ -130,12 +129,12 @@
@@ -265,7 +264,7 @@
-
+
diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/Base/TimePickerBaseStyle.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Base/TimePickerBaseStyle.xaml
index aebdd389..ae115ada 100644
--- a/src/Shared/HandyControl_Shared/Themes/Styles/Base/TimePickerBaseStyle.xaml
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/Base/TimePickerBaseStyle.xaml
@@ -1,7 +1,6 @@
@@ -162,13 +161,13 @@
@@ -330,7 +329,7 @@
-
+
diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/SplitButton.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/SplitButton.xaml
index f72a35d0..3e3ba2dc 100644
--- a/src/Shared/HandyControl_Shared/Themes/Styles/SplitButton.xaml
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/SplitButton.xaml
@@ -1,10 +1,42 @@
-
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
From e5029aa5dd7b3167d974479d3ac05bf6d267b4af Mon Sep 17 00:00:00 2001
From: NaBian <836904362@qq.com>
Date: Tue, 17 Sep 2019 00:49:35 +0800
Subject: [PATCH 4/4] add SplitButton
---
README.md | 4 +++
.../HandyControlDemo_Shared.projitems | 1 -
.../Resources/Themes/Styles/Style.xaml | 5 +--
.../Basic/CustomSplitButtonItem.cs | 10 ------
.../Controls/SplitButtonDemoCtl.xaml | 33 +++++++------------
.../Controls/Block/FloatingBlock.cs | 8 ++---
.../Button/{SplitButton => }/SplitButton.cs | 27 ++++++---------
.../Button/SplitButton/ISplitButtonItem.cs | 6 ----
.../Button/SplitButton/SplitButtonItem.cs | 9 -----
.../Controls/Input/DateTimePicker.cs | 1 -
.../HandyControl_Shared.projitems | 4 +--
.../Styles/Base/SplitButtonBaseStyle.xaml | 13 ++------
12 files changed, 34 insertions(+), 87 deletions(-)
delete mode 100644 src/Shared/HandyControlDemo_Shared/UserControl/Basic/CustomSplitButtonItem.cs
rename src/Shared/HandyControl_Shared/Controls/Button/{SplitButton => }/SplitButton.cs (79%)
delete mode 100644 src/Shared/HandyControl_Shared/Controls/Button/SplitButton/ISplitButtonItem.cs
delete mode 100644 src/Shared/HandyControl_Shared/Controls/Button/SplitButton/SplitButtonItem.cs
diff --git a/README.md b/README.md
index f6426bca..c6676eac 100644
--- a/README.md
+++ b/README.md
@@ -63,6 +63,10 @@ Step 4:enjoy coding
## Latest examples
+### SplitButton
+
+
+
### FloatingBlock

diff --git a/src/Shared/HandyControlDemo_Shared/HandyControlDemo_Shared.projitems b/src/Shared/HandyControlDemo_Shared/HandyControlDemo_Shared.projitems
index 347a43c1..38e214fb 100644
--- a/src/Shared/HandyControlDemo_Shared/HandyControlDemo_Shared.projitems
+++ b/src/Shared/HandyControlDemo_Shared/HandyControlDemo_Shared.projitems
@@ -38,7 +38,6 @@
ChatBox.xaml
-
InteractiveDialog.xaml
diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Themes/Styles/Style.xaml b/src/Shared/HandyControlDemo_Shared/Resources/Themes/Styles/Style.xaml
index 9167c105..49a0d290 100644
--- a/src/Shared/HandyControlDemo_Shared/Resources/Themes/Styles/Style.xaml
+++ b/src/Shared/HandyControlDemo_Shared/Resources/Themes/Styles/Style.xaml
@@ -1,7 +1,6 @@
+ xmlns:hc="https://handyorg.github.io/handycontrol">
@@ -99,6 +98,4 @@
-
-
\ No newline at end of file
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Basic/CustomSplitButtonItem.cs b/src/Shared/HandyControlDemo_Shared/UserControl/Basic/CustomSplitButtonItem.cs
deleted file mode 100644
index 3dfadad9..00000000
--- a/src/Shared/HandyControlDemo_Shared/UserControl/Basic/CustomSplitButtonItem.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using System.Windows.Controls;
-using HandyControl.Controls;
-
-namespace HandyControlDemo.UserControl
-{
- public class CustomSplitButtonItem : ComboBoxItem, ISplitButtonItem
- {
-
- }
-}
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SplitButtonDemoCtl.xaml b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SplitButtonDemoCtl.xaml
index 58cbf87f..60e55413 100644
--- a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SplitButtonDemoCtl.xaml
+++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SplitButtonDemoCtl.xaml
@@ -7,39 +7,30 @@
DataContext="{Binding SplitButtonDemo,Source={StaticResource Locator}}">
-
+
-
-
-
+
+
+
-
+
-
-
-
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
diff --git a/src/Shared/HandyControl_Shared/Controls/Block/FloatingBlock.cs b/src/Shared/HandyControl_Shared/Controls/Block/FloatingBlock.cs
index 5901c7ed..f838f2bf 100644
--- a/src/Shared/HandyControl_Shared/Controls/Block/FloatingBlock.cs
+++ b/src/Shared/HandyControl_Shared/Controls/Block/FloatingBlock.cs
@@ -101,13 +101,13 @@ namespace HandyControl.Controls
{
if (!(d is UIElement target)) return;
- target.RemoveHandler(PreviewMouseLeftButtonDownEvent, new MouseButtonEventHandler(Target_PreviewMouseLeftButtonDown));
- target.RemoveHandler(PreviewMouseLeftButtonUpEvent, new MouseButtonEventHandler(Target_PreviewMouseLeftButtonUp));
+ target.PreviewMouseLeftButtonDown -= Target_PreviewMouseLeftButtonDown;
+ target.PreviewMouseLeftButtonUp -= Target_PreviewMouseLeftButtonUp;
if (e.NewValue != null)
{
- target.AddHandler(PreviewMouseLeftButtonDownEvent, new MouseButtonEventHandler(Target_PreviewMouseLeftButtonDown));
- target.AddHandler(PreviewMouseLeftButtonUpEvent, new MouseButtonEventHandler(Target_PreviewMouseLeftButtonUp));
+ target.PreviewMouseLeftButtonDown += Target_PreviewMouseLeftButtonDown;
+ target.PreviewMouseLeftButtonUp += Target_PreviewMouseLeftButtonUp;
}
}
diff --git a/src/Shared/HandyControl_Shared/Controls/Button/SplitButton/SplitButton.cs b/src/Shared/HandyControl_Shared/Controls/Button/SplitButton.cs
similarity index 79%
rename from src/Shared/HandyControl_Shared/Controls/Button/SplitButton/SplitButton.cs
rename to src/Shared/HandyControl_Shared/Controls/Button/SplitButton.cs
index 6995ab89..0bdd19e7 100644
--- a/src/Shared/HandyControl_Shared/Controls/Button/SplitButton/SplitButton.cs
+++ b/src/Shared/HandyControl_Shared/Controls/Button/SplitButton.cs
@@ -7,13 +7,8 @@ using HandyControl.Data.Enum;
namespace HandyControl.Controls
{
- [TemplatePart(Name = ElementArrow, Type = typeof(ToggleButton))]
public class SplitButton : ButtonBase
{
- private const string ElementArrow = "PART_Arrow";
-
- private ToggleButton _toggleArrow;
-
public static readonly DependencyProperty HitModeProperty = DependencyProperty.Register(
"HitMode", typeof(MouseHitMode), typeof(SplitButton), new PropertyMetadata(default(MouseHitMode)));
@@ -55,18 +50,11 @@ namespace HandyControl.Controls
AddHandler(MenuItem.ClickEvent, new RoutedEventHandler(ItemsOnClick));
}
- public override void OnApplyTemplate()
- {
- base.OnApplyTemplate();
-
- _toggleArrow = GetTemplateChild(ElementArrow) as ToggleButton;
- }
-
private void ItemsOnClick(object sender, RoutedEventArgs e)
{
- if (e.OriginalSource is ISplitButtonItem)
+ if (e.OriginalSource is MenuItem)
{
- SetCurrentValue(IsDropDownOpenProperty, false);
+ SetCurrentValue(IsDropDownOpenProperty, ValueBoxes.FalseBox);
}
}
@@ -78,10 +66,15 @@ namespace HandyControl.Controls
{
e.Handled = true;
}
- else if (_toggleArrow != null && _toggleArrow.IsMouseOver)
+ }
+
+ protected override void OnMouseEnter(MouseEventArgs e)
+ {
+ base.OnMouseEnter(e);
+
+ if (HitMode == MouseHitMode.Hover)
{
- SetCurrentValue(IsDropDownOpenProperty, _toggleArrow.IsChecked != true);
- e.Handled = true;
+ SetCurrentValue(IsDropDownOpenProperty, ValueBoxes.TrueBox);
}
}
}
diff --git a/src/Shared/HandyControl_Shared/Controls/Button/SplitButton/ISplitButtonItem.cs b/src/Shared/HandyControl_Shared/Controls/Button/SplitButton/ISplitButtonItem.cs
deleted file mode 100644
index c0df5384..00000000
--- a/src/Shared/HandyControl_Shared/Controls/Button/SplitButton/ISplitButtonItem.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-namespace HandyControl.Controls
-{
- public interface ISplitButtonItem
- {
- }
-}
diff --git a/src/Shared/HandyControl_Shared/Controls/Button/SplitButton/SplitButtonItem.cs b/src/Shared/HandyControl_Shared/Controls/Button/SplitButton/SplitButtonItem.cs
deleted file mode 100644
index 8f4d6b58..00000000
--- a/src/Shared/HandyControl_Shared/Controls/Button/SplitButton/SplitButtonItem.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using System.Windows.Controls;
-
-namespace HandyControl.Controls
-{
- public class SplitButtonItem : MenuItem, ISplitButtonItem
- {
-
- }
-}
\ No newline at end of file
diff --git a/src/Shared/HandyControl_Shared/Controls/Input/DateTimePicker.cs b/src/Shared/HandyControl_Shared/Controls/Input/DateTimePicker.cs
index 55427b99..843a7d3b 100644
--- a/src/Shared/HandyControl_Shared/Controls/Input/DateTimePicker.cs
+++ b/src/Shared/HandyControl_Shared/Controls/Input/DateTimePicker.cs
@@ -147,7 +147,6 @@ namespace HandyControl.Controls
dp._calendarWithClock.Focus();
});
}
-
}
}
diff --git a/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems b/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems
index ae13a98c..8c3bb78b 100644
--- a/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems
+++ b/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems
@@ -21,9 +21,7 @@
-
-
-
+
diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/Base/SplitButtonBaseStyle.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Base/SplitButtonBaseStyle.xaml
index 9da8e511..b173b635 100644
--- a/src/Shared/HandyControl_Shared/Themes/Styles/Base/SplitButtonBaseStyle.xaml
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/Base/SplitButtonBaseStyle.xaml
@@ -7,8 +7,6 @@
-
-