From 21e627873b4fa71215744db30cce99d160b16235 Mon Sep 17 00:00:00 2001 From: dzhelnin Date: Tue, 13 Mar 2018 22:08:56 +0300 Subject: [PATCH 1/2] Added InitialDelay property for better user experience. --- src/Avalonia.Controls/RepeatButton.cs | 29 +++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/src/Avalonia.Controls/RepeatButton.cs b/src/Avalonia.Controls/RepeatButton.cs index a9ccb79fe1..482c45c8c0 100644 --- a/src/Avalonia.Controls/RepeatButton.cs +++ b/src/Avalonia.Controls/RepeatButton.cs @@ -12,6 +12,12 @@ namespace Avalonia.Controls public static readonly StyledProperty DelayProperty = AvaloniaProperty.Register(nameof(Delay), 100); + /// + /// Defines the property. + /// + public static readonly StyledProperty InitialDelayProperty = + AvaloniaProperty.Register(nameof(InitialDelay), 300); + private DispatcherTimer _repeatTimer; /// @@ -23,20 +29,39 @@ namespace Avalonia.Controls set { SetValue(DelayProperty, value); } } + /// + /// Gets or sets the amount of time, in milliseconds, to wait before repeating begins. + /// + public int InitialDelay + { + get { return GetValue(InitialDelayProperty); } + set { SetValue(InitialDelayProperty, value); } + } + private void StartTimer() { if (_repeatTimer == null) { _repeatTimer = new DispatcherTimer(); - _repeatTimer.Tick += (o, e) => OnClick(); + _repeatTimer.Tick += RepeatTimerOnTick; } if (_repeatTimer.IsEnabled) return; - _repeatTimer.Interval = TimeSpan.FromMilliseconds(Delay); + _repeatTimer.Interval = TimeSpan.FromMilliseconds(InitialDelay); _repeatTimer.Start(); } + private void RepeatTimerOnTick(object sender, EventArgs e) + { + var interval = TimeSpan.FromMilliseconds(Delay); + if (_repeatTimer.Interval != interval) + { + _repeatTimer.Interval = interval; + } + OnClick(); + } + private void StopTimer() { _repeatTimer?.Stop(); From e468760c96d453a294ef82333014ab55ebf1af35 Mon Sep 17 00:00:00 2001 From: dzhelnin Date: Tue, 13 Mar 2018 22:21:25 +0300 Subject: [PATCH 2/2] Delay renamed to Interval. InitialDelay renamed to Delay. --- src/Avalonia.Controls/RepeatButton.cs | 28 +++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/Avalonia.Controls/RepeatButton.cs b/src/Avalonia.Controls/RepeatButton.cs index 482c45c8c0..07a1e82638 100644 --- a/src/Avalonia.Controls/RepeatButton.cs +++ b/src/Avalonia.Controls/RepeatButton.cs @@ -7,35 +7,35 @@ namespace Avalonia.Controls public class RepeatButton : Button { /// - /// Defines the property. + /// Defines the property. /// - public static readonly StyledProperty DelayProperty = - AvaloniaProperty.Register(nameof(Delay), 100); + public static readonly StyledProperty IntervalProperty = + AvaloniaProperty.Register(nameof(Interval), 100); /// - /// Defines the property. + /// Defines the property. /// - public static readonly StyledProperty InitialDelayProperty = - AvaloniaProperty.Register(nameof(InitialDelay), 300); + public static readonly StyledProperty DelayProperty = + AvaloniaProperty.Register(nameof(Delay), 300); private DispatcherTimer _repeatTimer; /// /// Gets or sets the amount of time, in milliseconds, of repeating clicks. /// - public int Delay + public int Interval { - get { return GetValue(DelayProperty); } - set { SetValue(DelayProperty, value); } + get { return GetValue(IntervalProperty); } + set { SetValue(IntervalProperty, value); } } /// /// Gets or sets the amount of time, in milliseconds, to wait before repeating begins. /// - public int InitialDelay + public int Delay { - get { return GetValue(InitialDelayProperty); } - set { SetValue(InitialDelayProperty, value); } + get { return GetValue(DelayProperty); } + set { SetValue(DelayProperty, value); } } private void StartTimer() @@ -48,13 +48,13 @@ namespace Avalonia.Controls if (_repeatTimer.IsEnabled) return; - _repeatTimer.Interval = TimeSpan.FromMilliseconds(InitialDelay); + _repeatTimer.Interval = TimeSpan.FromMilliseconds(Delay); _repeatTimer.Start(); } private void RepeatTimerOnTick(object sender, EventArgs e) { - var interval = TimeSpan.FromMilliseconds(Delay); + var interval = TimeSpan.FromMilliseconds(Interval); if (_repeatTimer.Interval != interval) { _repeatTimer.Interval = interval;