From 58dc24b51ccd82d9bb4f097ff2b344b2880e7171 Mon Sep 17 00:00:00 2001 From: NaBian <836904362@qq.com> Date: Tue, 22 Jan 2019 20:02:40 +0800 Subject: [PATCH] add ProgressButton --- .../Controls/Button/ProgressButton.cs | 27 +++++++ .../{ => Cover}/CoverFlow/CoverFlow.cs | 0 .../{ => Cover}/CoverFlow/CoverFlowItem.cs | 0 .../{ => Cover}/CoverView/CoverView.cs | 0 .../{ => Cover}/CoverView/CoverViewContent.cs | 0 .../{ => Cover}/CoverView/CoverViewItem.cs | 0 HandyControl/HandyControl.csproj | 19 +++-- .../Styles/Base/ProgressBarBaseStyle.xaml | 2 +- .../Styles/Base/ProgressButtonBaseStyle.xaml | 67 ++++++++++++++++++ .../Themes/Styles/ProgressButton.xaml | 43 +++++++++++ HandyControl/Themes/Styles/Style.xaml | 1 + HandyControlDemo/Data/MessageToken.cs | 2 + HandyControlDemo/Data/MessageToken.tt | 3 +- HandyControlDemo/HandyControlDemo.csproj | 8 +++ .../Properties/Langs/Lang.Designer.cs | 18 +++++ .../Properties/Langs/Lang.en.resx | 8 ++- HandyControlDemo/Properties/Langs/Lang.resx | 8 ++- .../LeftMainContent/ProgressButton_16x.png | Bin 0 -> 200 bytes .../Controls/ProgressButtonDemoCtl.xaml | 17 +++++ .../Controls/ProgressButtonDemoCtl.xaml.cs | 65 +++++++++++++++++ .../Controls/WaterfallPanelDemoCtl.xaml | 4 +- .../UserControl/Main/LeftMainContent.xaml | 7 +- README.md | 8 ++- Resources/ProgressButton.png | Bin 0 -> 7374 bytes 24 files changed, 293 insertions(+), 14 deletions(-) create mode 100644 HandyControl/Controls/Button/ProgressButton.cs rename HandyControl/Controls/{ => Cover}/CoverFlow/CoverFlow.cs (100%) rename HandyControl/Controls/{ => Cover}/CoverFlow/CoverFlowItem.cs (100%) rename HandyControl/Controls/{ => Cover}/CoverView/CoverView.cs (100%) rename HandyControl/Controls/{ => Cover}/CoverView/CoverViewContent.cs (100%) rename HandyControl/Controls/{ => Cover}/CoverView/CoverViewItem.cs (100%) create mode 100644 HandyControl/Themes/Styles/Base/ProgressButtonBaseStyle.xaml create mode 100644 HandyControl/Themes/Styles/ProgressButton.xaml create mode 100644 HandyControlDemo/Resources/Img/LeftMainContent/ProgressButton_16x.png create mode 100644 HandyControlDemo/UserControl/Controls/ProgressButtonDemoCtl.xaml create mode 100644 HandyControlDemo/UserControl/Controls/ProgressButtonDemoCtl.xaml.cs create mode 100644 Resources/ProgressButton.png diff --git a/HandyControl/Controls/Button/ProgressButton.cs b/HandyControl/Controls/Button/ProgressButton.cs new file mode 100644 index 00000000..87038921 --- /dev/null +++ b/HandyControl/Controls/Button/ProgressButton.cs @@ -0,0 +1,27 @@ +using System.Windows; +using System.Windows.Controls.Primitives; +using HandyControl.Data; + +namespace HandyControl.Controls +{ + public class ProgressButton : ToggleButton + { + public static readonly DependencyProperty ProgressStyleProperty = DependencyProperty.Register( + "ProgressStyle", typeof(Style), typeof(ProgressButton), new PropertyMetadata(default(Style))); + + public Style ProgressStyle + { + get => (Style) GetValue(ProgressStyleProperty); + set => SetValue(ProgressStyleProperty, value); + } + + public static readonly DependencyProperty ProgressProperty = DependencyProperty.Register( + "Progress", typeof(double), typeof(ProgressButton), new PropertyMetadata(ValueBoxes.Double0Box)); + + public double Progress + { + get => (double) GetValue(ProgressProperty); + set => SetValue(ProgressProperty, value); + } + } +} \ No newline at end of file diff --git a/HandyControl/Controls/CoverFlow/CoverFlow.cs b/HandyControl/Controls/Cover/CoverFlow/CoverFlow.cs similarity index 100% rename from HandyControl/Controls/CoverFlow/CoverFlow.cs rename to HandyControl/Controls/Cover/CoverFlow/CoverFlow.cs diff --git a/HandyControl/Controls/CoverFlow/CoverFlowItem.cs b/HandyControl/Controls/Cover/CoverFlow/CoverFlowItem.cs similarity index 100% rename from HandyControl/Controls/CoverFlow/CoverFlowItem.cs rename to HandyControl/Controls/Cover/CoverFlow/CoverFlowItem.cs diff --git a/HandyControl/Controls/CoverView/CoverView.cs b/HandyControl/Controls/Cover/CoverView/CoverView.cs similarity index 100% rename from HandyControl/Controls/CoverView/CoverView.cs rename to HandyControl/Controls/Cover/CoverView/CoverView.cs diff --git a/HandyControl/Controls/CoverView/CoverViewContent.cs b/HandyControl/Controls/Cover/CoverView/CoverViewContent.cs similarity index 100% rename from HandyControl/Controls/CoverView/CoverViewContent.cs rename to HandyControl/Controls/Cover/CoverView/CoverViewContent.cs diff --git a/HandyControl/Controls/CoverView/CoverViewItem.cs b/HandyControl/Controls/Cover/CoverView/CoverViewItem.cs similarity index 100% rename from HandyControl/Controls/CoverView/CoverViewItem.cs rename to HandyControl/Controls/Cover/CoverView/CoverViewItem.cs diff --git a/HandyControl/HandyControl.csproj b/HandyControl/HandyControl.csproj index 282d82e9..26582c8b 100644 --- a/HandyControl/HandyControl.csproj +++ b/HandyControl/HandyControl.csproj @@ -90,10 +90,11 @@ - - - - + + + + + @@ -108,7 +109,7 @@ - + @@ -370,6 +371,10 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + Designer MSBuild:Compile @@ -610,6 +615,10 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + Designer MSBuild:Compile diff --git a/HandyControl/Themes/Styles/Base/ProgressBarBaseStyle.xaml b/HandyControl/Themes/Styles/Base/ProgressBarBaseStyle.xaml index 1ac7de1f..df26dbfe 100644 --- a/HandyControl/Themes/Styles/Base/ProgressBarBaseStyle.xaml +++ b/HandyControl/Themes/Styles/Base/ProgressBarBaseStyle.xaml @@ -76,7 +76,7 @@ - + diff --git a/HandyControl/Themes/Styles/Base/ProgressButtonBaseStyle.xaml b/HandyControl/Themes/Styles/Base/ProgressButtonBaseStyle.xaml new file mode 100644 index 00000000..33ffb71f --- /dev/null +++ b/HandyControl/Themes/Styles/Base/ProgressButtonBaseStyle.xaml @@ -0,0 +1,67 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/HandyControl/Themes/Styles/ProgressButton.xaml b/HandyControl/Themes/Styles/ProgressButton.xaml new file mode 100644 index 00000000..c3d7257d --- /dev/null +++ b/HandyControl/Themes/Styles/ProgressButton.xaml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/HandyControl/Themes/Styles/Style.xaml b/HandyControl/Themes/Styles/Style.xaml index 8ec2be6a..52a4665c 100644 --- a/HandyControl/Themes/Styles/Style.xaml +++ b/HandyControl/Themes/Styles/Style.xaml @@ -54,6 +54,7 @@ + \ No newline at end of file diff --git a/HandyControlDemo/Data/MessageToken.cs b/HandyControlDemo/Data/MessageToken.cs index 739b20bb..85d7e771 100644 --- a/HandyControlDemo/Data/MessageToken.cs +++ b/HandyControlDemo/Data/MessageToken.cs @@ -76,6 +76,8 @@ public static readonly string CoverFlowDemoCtl = nameof(CoverFlowDemoCtl); + public static readonly string ProgressButtonDemoCtl = nameof(ProgressButtonDemoCtl); + public static readonly string ButtonDemoCtl = nameof(ButtonDemoCtl); public static readonly string ToggleButtonDemoCtl = nameof(ToggleButtonDemoCtl); diff --git a/HandyControlDemo/Data/MessageToken.tt b/HandyControlDemo/Data/MessageToken.tt index 4962b589..7fbce7b4 100644 --- a/HandyControlDemo/Data/MessageToken.tt +++ b/HandyControlDemo/Data/MessageToken.tt @@ -40,7 +40,8 @@ var controlList = new List "ShieldDemoCtl", "WaterfallPanelDemoCtl", "CoverViewDemoCtl", - "CoverFlowDemoCtl" + "CoverFlowDemoCtl", + "ProgressButtonDemoCtl" }; var styleList = new List { diff --git a/HandyControlDemo/HandyControlDemo.csproj b/HandyControlDemo/HandyControlDemo.csproj index 7f0efea6..a64a550e 100644 --- a/HandyControlDemo/HandyControlDemo.csproj +++ b/HandyControlDemo/HandyControlDemo.csproj @@ -189,6 +189,9 @@ PreviewSliderDemoCtl.xaml + + ProgressButtonDemoCtl.xaml + RateDemoCtl.xaml @@ -490,6 +493,10 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + Designer MSBuild:Compile @@ -704,6 +711,7 @@ TextTemplatingFileGenerator MessageToken.cs + diff --git a/HandyControlDemo/Properties/Langs/Lang.Designer.cs b/HandyControlDemo/Properties/Langs/Lang.Designer.cs index a19f2900..67ae02e4 100644 --- a/HandyControlDemo/Properties/Langs/Lang.Designer.cs +++ b/HandyControlDemo/Properties/Langs/Lang.Designer.cs @@ -789,6 +789,15 @@ namespace HandyControlDemo.Properties.Langs { } } + /// + /// 查找类似 进度按钮 的本地化字符串。 + /// + public static string ProgressButton { + get { + return ResourceManager.GetString("ProgressButton", resourceCulture); + } + } + /// /// 查找类似 QQ群 的本地化字符串。 /// @@ -1104,6 +1113,15 @@ namespace HandyControlDemo.Properties.Langs { } } + /// + /// 查找类似 上传;上传中 的本地化字符串。 + /// + public static string UploadStr { + get { + return ResourceManager.GetString("UploadStr", resourceCulture); + } + } + /// /// 查找类似 警告 的本地化字符串。 /// diff --git a/HandyControlDemo/Properties/Langs/Lang.en.resx b/HandyControlDemo/Properties/Langs/Lang.en.resx index 3db23d8b..04e9e197 100644 --- a/HandyControlDemo/Properties/Langs/Lang.en.resx +++ b/HandyControlDemo/Properties/Langs/Lang.en.resx @@ -474,4 +474,10 @@ MessageBox - + + ProgressButton + + + Upload;Uploading + + \ No newline at end of file diff --git a/HandyControlDemo/Properties/Langs/Lang.resx b/HandyControlDemo/Properties/Langs/Lang.resx index 37ee53dc..ce90e40f 100644 --- a/HandyControlDemo/Properties/Langs/Lang.resx +++ b/HandyControlDemo/Properties/Langs/Lang.resx @@ -474,4 +474,10 @@ 消息框 - + + 进度按钮 + + + 上传;上传中 + + \ No newline at end of file diff --git a/HandyControlDemo/Resources/Img/LeftMainContent/ProgressButton_16x.png b/HandyControlDemo/Resources/Img/LeftMainContent/ProgressButton_16x.png new file mode 100644 index 0000000000000000000000000000000000000000..ad7026acf64c4c93f69db4d6ac7582c6bbcc073e GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5M?jcysy3fAP_W9= z#WAEJ?(F1)ybTIGt_KY`{g&t*V6o`dS-`zQ_@u;MC7D^XX2@x==UjTC{^akI?XJtG zg!q>3ye*Z%5V5&H{^wbdif?hThFvG_MQv?);KgG2CxwUUcwHCIvCIRC`{cZef3;_u usAP)mdB$rn--hX3NXU^Z@kzh$S1?})*WPJ!_JA+Y6%3xPelF{r5}E+S6i0mk literal 0 HcmV?d00001 diff --git a/HandyControlDemo/UserControl/Controls/ProgressButtonDemoCtl.xaml b/HandyControlDemo/UserControl/Controls/ProgressButtonDemoCtl.xaml new file mode 100644 index 00000000..4b78b122 --- /dev/null +++ b/HandyControlDemo/UserControl/Controls/ProgressButtonDemoCtl.xaml @@ -0,0 +1,17 @@ + + + + + + + + + + + + diff --git a/HandyControlDemo/UserControl/Controls/ProgressButtonDemoCtl.xaml.cs b/HandyControlDemo/UserControl/Controls/ProgressButtonDemoCtl.xaml.cs new file mode 100644 index 00000000..f44f7110 --- /dev/null +++ b/HandyControlDemo/UserControl/Controls/ProgressButtonDemoCtl.xaml.cs @@ -0,0 +1,65 @@ +using System; +using System.Windows; +using System.Windows.Threading; + +namespace HandyControlDemo.UserControl +{ + public partial class ProgressButtonDemoCtl + { + public static readonly DependencyProperty ProgressProperty = DependencyProperty.Register( + "Progress", typeof(int), typeof(ProgressButtonDemoCtl), new PropertyMetadata(default(int))); + + public int Progress + { + get => (int) GetValue(ProgressProperty); + set => SetValue(ProgressProperty, value); + } + + public static readonly DependencyProperty IsUploadingProperty = DependencyProperty.Register( + "IsUploading", typeof(bool), typeof(ProgressButtonDemoCtl), new PropertyMetadata(default(bool))); + + public bool IsUploading + { + get => (bool) GetValue(IsUploadingProperty); + set => SetValue(IsUploadingProperty, value); + } + + private readonly DispatcherTimer _timer; + + public ProgressButtonDemoCtl() + { + InitializeComponent(); + + DataContext = this; + + _timer = new DispatcherTimer + { + Interval = TimeSpan.FromMilliseconds(200) + }; + _timer.Tick += Timer_Tick; + } + + private void Timer_Tick(object sender, EventArgs e) + { + Progress++; + if (Progress == 100) + { + Progress = 0; + _timer.Stop(); + IsUploading = false; + } + } + + private void ButtonProgress_OnClick(object sender, RoutedEventArgs e) + { + if (_timer.IsEnabled) + { + _timer.Stop(); + } + else + { + _timer.Start(); + } + } + } +} diff --git a/HandyControlDemo/UserControl/Controls/WaterfallPanelDemoCtl.xaml b/HandyControlDemo/UserControl/Controls/WaterfallPanelDemoCtl.xaml index 9a631afa..7ba4b060 100644 --- a/HandyControlDemo/UserControl/Controls/WaterfallPanelDemoCtl.xaml +++ b/HandyControlDemo/UserControl/Controls/WaterfallPanelDemoCtl.xaml @@ -5,7 +5,7 @@ xmlns:langs="clr-namespace:HandyControlDemo.Properties.Langs" xmlns:interactivity="clr-namespace:HandyControl.Interactivity;assembly=HandyControl" Background="{DynamicResource RegionBrush}"> - + @@ -53,5 +53,5 @@ - + diff --git a/HandyControlDemo/UserControl/Main/LeftMainContent.xaml b/HandyControlDemo/UserControl/Main/LeftMainContent.xaml index 7f1b2552..b4b12e0d 100644 --- a/HandyControlDemo/UserControl/Main/LeftMainContent.xaml +++ b/HandyControlDemo/UserControl/Main/LeftMainContent.xaml @@ -182,6 +182,11 @@ + + + + + @@ -232,7 +237,7 @@ - + diff --git a/README.md b/README.md index e5279bc9..9ece5e4d 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,10 @@ ## Latest examples +### ProgressButton + +![ProgressButton](https://raw.githubusercontent.com/NaBian/HandyControl/master/Resources/ProgressButton.png) + ### CoverFlow ![CoverFlow](https://raw.githubusercontent.com/NaBian/HandyControl/master/Resources/CoverFlow.gif) @@ -22,6 +26,8 @@ ![WaterfallPanel](https://raw.githubusercontent.com/NaBian/HandyControl/master/Resources/WaterfallPanel.png) +## History publication + ### Rate ![Rate](https://raw.githubusercontent.com/NaBian/HandyControl/master/Resources/Rate.png) @@ -30,8 +36,6 @@ ![BlurWindow](https://raw.githubusercontent.com/NaBian/HandyControl/master/Resources/BlurWindow.png) -## History publication - ### FlipClock ![FlipClock](https://raw.githubusercontent.com/NaBian/HandyControl/master/Resources/FlipClock.gif) diff --git a/Resources/ProgressButton.png b/Resources/ProgressButton.png new file mode 100644 index 0000000000000000000000000000000000000000..9af0542d6211be96d15a621ea1366a4deb8e606e GIT binary patch literal 7374 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 LQIUpAng#z48R~UT literal 0 HcmV?d00001