From 7648f2060549b282e10273f2a653673746beeb36 Mon Sep 17 00:00:00 2001 From: NaBian <836904362@qq.com> Date: Wed, 3 Jun 2020 23:41:14 +0800 Subject: [PATCH] close #390 close #277 --- .../Controls/RunningBlockDemoCtl.xaml | 2 + .../Controls/Block/RunningBlock.cs | 25 ++++-- .../Styles/Base/RunningBlockBaseStyle.xaml | 18 ++-- .../Tools/Converter/ColLayoutConverter.cs | 83 +++++++------------ 4 files changed, 60 insertions(+), 68 deletions(-) diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/RunningBlockDemoCtl.xaml b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/RunningBlockDemoCtl.xaml index d3f362e3..74fc67f7 100644 --- a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/RunningBlockDemoCtl.xaml +++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/RunningBlockDemoCtl.xaml @@ -9,6 +9,8 @@ + + diff --git a/src/Shared/HandyControl_Shared/Controls/Block/RunningBlock.cs b/src/Shared/HandyControl_Shared/Controls/Block/RunningBlock.cs index 39bb9a1a..dbdfe161 100644 --- a/src/Shared/HandyControl_Shared/Controls/Block/RunningBlock.cs +++ b/src/Shared/HandyControl_Shared/Controls/Block/RunningBlock.cs @@ -4,6 +4,7 @@ using System.Windows.Controls; using System.Windows.Media; using System.Windows.Media.Animation; using HandyControl.Data; +using HandyControl.Expression.Drawing; namespace HandyControl.Controls { @@ -65,6 +66,15 @@ namespace HandyControl.Controls set => SetValue(DurationProperty, value); } + public static readonly DependencyProperty SpeedProperty = DependencyProperty.Register( + "Speed", typeof(double), typeof(RunningBlock), new FrameworkPropertyMetadata(double.NaN, FrameworkPropertyMetadataOptions.AffectsRender)); + + public double Speed + { + get => (double) GetValue(SpeedProperty); + set => SetValue(SpeedProperty, value); + } + public static readonly DependencyProperty IsRunningProperty = DependencyProperty.Register( "IsRunning", typeof(bool), typeof(RunningBlock), new PropertyMetadata(ValueBoxes.TrueBox, (o, args) => { @@ -150,11 +160,18 @@ namespace HandyControl.Controls propertyPath = new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[0].(TranslateTransform.Y)"); } - var animation = new DoubleAnimation(from, to, Duration) + var duration = double.IsNaN(Speed) + ? Duration + : !MathHelper.IsVerySmall(Speed) + ? TimeSpan.FromSeconds((to - from) / Speed) + : Duration; + + var animation = new DoubleAnimation(from, to, duration) { RepeatBehavior = RepeatBehavior.Forever, AutoReverse = AutoReverse }; + Storyboard.SetTargetProperty(animation, propertyPath); Storyboard.SetTarget(animation, _elementContent); @@ -163,10 +180,6 @@ namespace HandyControl.Controls _storyboard.Begin(); } - protected override void OnRender(DrawingContext drawingContext) - { - base.OnRender(drawingContext); - UpdateContent(); - } + protected override void OnRender(DrawingContext drawingContext) => UpdateContent(); } } \ No newline at end of file diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/Base/RunningBlockBaseStyle.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Base/RunningBlockBaseStyle.xaml index 60d8bee0..88d5ecdf 100644 --- a/src/Shared/HandyControl_Shared/Themes/Styles/Base/RunningBlockBaseStyle.xaml +++ b/src/Shared/HandyControl_Shared/Themes/Styles/Base/RunningBlockBaseStyle.xaml @@ -17,14 +17,16 @@ - - - - - - - - + + + + + + + + + + diff --git a/src/Shared/HandyControl_Shared/Tools/Converter/ColLayoutConverter.cs b/src/Shared/HandyControl_Shared/Tools/Converter/ColLayoutConverter.cs index 922c7a57..0116ffa8 100644 --- a/src/Shared/HandyControl_Shared/Tools/Converter/ColLayoutConverter.cs +++ b/src/Shared/HandyControl_Shared/Tools/Converter/ColLayoutConverter.cs @@ -37,15 +37,12 @@ namespace HandyControl.Tools.Converter { if (source == null) throw GetConvertFromException(null); - switch (source) + return source switch { - case string s: - return FromString(s, cultureInfo); - case double d: - return new ColLayout((int)d); - default: - return new ColLayout(Convert.ToInt32(source, cultureInfo)); - } + string s => FromString(s, cultureInfo), + double d => new ColLayout((int) d), + _ => new ColLayout(Convert.ToInt32(source, cultureInfo)) + }; } [SecurityCritical] @@ -108,53 +105,31 @@ namespace HandyControl.Tools.Converter i++; } - switch (i) + return i switch { - case 1: - return new ColLayout(lengths[0]); - case 2: - return new ColLayout - { - Xs = lengths[0], - Sm = lengths[1] - }; - case 3: - return new ColLayout - { - Xs = lengths[0], - Sm = lengths[1], - Md = lengths[2] - }; - case 4: - return new ColLayout - { - Xs = lengths[0], - Sm = lengths[1], - Md = lengths[2], - Lg = lengths[3] - }; - case 5: - return new ColLayout - { - Xs = lengths[0], - Sm = lengths[1], - Md = lengths[2], - Lg = lengths[3], - Xl = lengths[4] - }; - case 6: - return new ColLayout - { - Xs = lengths[0], - Sm = lengths[1], - Md = lengths[2], - Lg = lengths[3], - Xl = lengths[4], - Xxl = lengths[5] - }; - } - - throw new FormatException("InvalidStringColLayout"); + 1 => new ColLayout(lengths[0]), + 2 => new ColLayout {Xs = lengths[0], Sm = lengths[1]}, + 3 => new ColLayout {Xs = lengths[0], Sm = lengths[1], Md = lengths[2]}, + 4 => new ColLayout {Xs = lengths[0], Sm = lengths[1], Md = lengths[2], Lg = lengths[3]}, + 5 => new ColLayout + { + Xs = lengths[0], + Sm = lengths[1], + Md = lengths[2], + Lg = lengths[3], + Xl = lengths[4] + }, + 6 => new ColLayout + { + Xs = lengths[0], + Sm = lengths[1], + Md = lengths[2], + Lg = lengths[3], + Xl = lengths[4], + Xxl = lengths[5] + }, + _ => throw new FormatException("InvalidStringColLayout") + }; } } } \ No newline at end of file