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] 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