From aaedba97aae1ce1b31dbfc0bf2d86bd0251f97a8 Mon Sep 17 00:00:00 2001
From: NaBian <836904362@qq.com>
Date: Sun, 17 Nov 2019 20:11:29 +0800
Subject: [PATCH] refactor TimeBar
remove SetShowTime method
---
.../Service/Data/DataService.cs | 6 --
.../Controls/TimeBarDemoCtl.xaml.cs | 3 +-
.../Controls/Time/TimeBar/TimeBar.cs | 84 +++++++++++--------
3 files changed, 51 insertions(+), 42 deletions(-)
diff --git a/src/Shared/HandyControlDemo_Shared/Service/Data/DataService.cs b/src/Shared/HandyControlDemo_Shared/Service/Data/DataService.cs
index 17128d90..8e753131 100644
--- a/src/Shared/HandyControlDemo_Shared/Service/Data/DataService.cs
+++ b/src/Shared/HandyControlDemo_Shared/Service/Data/DataService.cs
@@ -179,12 +179,6 @@ namespace HandyControlDemo.Service
DisplayName = "AutumnBox",
AvatarUri = "https://www.atmb.top/images/leaves.png",
Link = "https://github.com/zsh2401/AutumnBox"
- },
- new AvatarModel
- {
- DisplayName = "PandaX Studio",
- AvatarUri = "https://raw.githubusercontent.com/aboutlong/pandaxstudio/master/pandax/pandax/source/image/logo.png",
- Link = "https://github.com/aboutlong/pandaxstudio"
}
};
}
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/TimeBarDemoCtl.xaml.cs b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/TimeBarDemoCtl.xaml.cs
index 5b91583c..8aec171c 100644
--- a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/TimeBarDemoCtl.xaml.cs
+++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/TimeBarDemoCtl.xaml.cs
@@ -1,5 +1,4 @@
-
-namespace HandyControlDemo.UserControl
+namespace HandyControlDemo.UserControl
{
public partial class TimeBarDemoCtl
{
diff --git a/src/Shared/HandyControl_Shared/Controls/Time/TimeBar/TimeBar.cs b/src/Shared/HandyControl_Shared/Controls/Time/TimeBar/TimeBar.cs
index 909e0e05..fdff8de5 100644
--- a/src/Shared/HandyControl_Shared/Controls/Time/TimeBar/TimeBar.cs
+++ b/src/Shared/HandyControl_Shared/Controls/Time/TimeBar/TimeBar.cs
@@ -67,17 +67,28 @@ namespace HandyControl.Controls
///
/// 选中时间
///
- internal static readonly DependencyProperty SelectedTimeProperty = DependencyProperty.Register(
+ public static readonly DependencyProperty SelectedTimeProperty = DependencyProperty.Register(
"SelectedTime", typeof(DateTime), typeof(TimeBar), new PropertyMetadata(default(DateTime), OnSelectedTimeChanged));
private static void OnSelectedTimeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (d is TimeBar timeBar && timeBar._textBlockSelected != null)
{
- timeBar._textBlockSelected.Text = ((DateTime) e.NewValue).ToString(timeBar.TimeFormat);
+ timeBar.OnSelectedTimeChanged((DateTime)e.NewValue);
}
}
+ private void OnSelectedTimeChanged(DateTime time)
+ {
+ _textBlockSelected.Text = time.ToString(TimeFormat);
+ if (!(_isDragging || _borderTopIsMouseLeftButtonDown))
+ {
+ _totalOffsetX = (_starTime - SelectedTime).TotalMilliseconds / _timeSpeList[SpeIndex] * _itemWidth;
+ }
+ UpdateSpeBlock();
+ UpdateMouseFollowBlockPos();
+ }
+
///
/// 时间改变事件
///
@@ -157,8 +168,6 @@ namespace HandyControl.Controls
SelectedTime = new DateTime(_starTime.Year, _starTime.Month, _starTime.Day, 0, 0, 0);
_starTime = SelectedTime;
_isLoaded = true;
- SizeChanged += TimeBar_OnSizeChanged;
- MouseMove += TimeBar_OnMouseMove;
}
public override void OnApplyTemplate()
@@ -191,7 +200,7 @@ namespace HandyControl.Controls
if (_isLoaded)
{
- TimeBar_OnSizeChanged(null, null);
+ Update();
}
_textBlockSelected.Text = SelectedTime.ToString(TimeFormat);
}
@@ -222,7 +231,7 @@ namespace HandyControl.Controls
///
/// 选中时间
///
- internal DateTime SelectedTime
+ public DateTime SelectedTime
{
get => (DateTime)GetValue(SelectedTimeProperty);
set => SetValue(SelectedTimeProperty, value);
@@ -300,23 +309,9 @@ namespace HandyControl.Controls
}
///
- /// 设置显示的时间
+ /// 更新刻度
///
- ///
- public void SetShowTime(DateTime time)
- {
- if (_isDragging || _borderTopIsMouseLeftButtonDown) return;
-
- SelectedTime = time;
- _totalOffsetX = (_starTime - SelectedTime).TotalMilliseconds / _timeSpeList[SpeIndex] * _itemWidth;
- Update();
- TimeBar_OnMouseMove(null, null);
- }
-
- ///
- /// 更新
- ///
- private void Update()
+ private void UpdateSpeBlock()
{
var rest = (_totalOffsetX + _tempOffsetX) % _itemWidth;
for (var i = 0; i < _speCount; i++)
@@ -368,8 +363,8 @@ namespace HandyControl.Controls
if (Mouse.LeftButton == MouseButtonState.Pressed) return;
SpeIndex += e.Delta > 0 ? 1 : -1;
_totalOffsetX = (_starTime - SelectedTime).TotalMilliseconds / _timeSpeList[SpeIndex] * _itemWidth;
- Update();
- TimeBar_OnMouseMove(null, null);
+ UpdateSpeBlock();
+ UpdateMouseFollowBlockPos();
e.Handled = true;
}
@@ -378,9 +373,7 @@ namespace HandyControl.Controls
_isDragging = true;
_tempOffsetX = _borderTop.RenderTransform.Value.OffsetX;
- SelectedTime = _mouseDownTime -
- TimeSpan.FromMilliseconds(_tempOffsetX / _itemWidth * _timeSpeList[_speIndex]);
- Update();
+ SelectedTime = _mouseDownTime - TimeSpan.FromMilliseconds(_tempOffsetX / _itemWidth * _timeSpeList[_speIndex]);
_borderTopIsMouseLeftButtonDown = false;
}
@@ -398,19 +391,30 @@ namespace HandyControl.Controls
private void DragElementBehavior_OnDragBegun(object sender, MouseEventArgs e) => _mouseDownTime = SelectedTime;
- private void TimeBar_OnSizeChanged(object sender, SizeChangedEventArgs e)
+ protected override void OnRenderSizeChanged(SizeChangedInfo sizeInfo)
+ {
+ base.OnRenderSizeChanged(sizeInfo);
+ Update();
+ }
+
+ ///
+ /// 更新
+ ///
+ private void Update()
{
if (_canvasSpe == null) return;
+
_speBlockList.Clear();
_canvasSpe.Children.Clear();
-
_speCount = (int)(ActualWidth / 800 * 9) | 1;
var itemWidthOld = _itemWidth;
_itemWidth = ActualWidth / _speCount;
_totalOffsetX = _itemWidth / itemWidthOld * _totalOffsetX % ActualWidth;
if (double.IsNaN(_totalOffsetX))
+ {
_totalOffsetX = 0;
+ }
var rest = (_totalOffsetX + _tempOffsetX) % _itemWidth;
var sub = rest <= 0 || double.IsNaN(rest) ? _speCount / 2 : _speCount / 2 - 1;
@@ -425,8 +429,12 @@ namespace HandyControl.Controls
_speBlockList.Add(block);
_canvasSpe.Children.Add(block);
}
+
if (_speIndex == 6)
+ {
SetSpeTimeFormat("HH:mm:ss");
+ }
+
ShowSpeStr = ActualWidth > 320;
for (var i = 0; i < _speCount; i++)
{
@@ -435,11 +443,20 @@ namespace HandyControl.Controls
item.MoveX((_itemWidth - item.Width) / 2);
}
- Update();
- TimeBar_OnMouseMove(null, null);
+ UpdateSpeBlock();
+ UpdateMouseFollowBlockPos();
}
- private void TimeBar_OnMouseMove(object sender, MouseEventArgs e)
+ protected override void OnMouseMove(MouseEventArgs e)
+ {
+ base.OnMouseMove(e);
+ UpdateMouseFollowBlockPos();
+ }
+
+ ///
+ /// 更新鼠标跟随块位置
+ ///
+ private void UpdateMouseFollowBlockPos()
{
var p = Mouse.GetPosition(this);
var mlliseconds = (p.X - ActualWidth / 2) / _itemWidth * _timeSpeList[_speIndex];
@@ -461,10 +478,9 @@ namespace HandyControl.Controls
var p = Mouse.GetPosition(this);
_tempOffsetX = ActualWidth / 2 - p.X;
SelectedTime -= TimeSpan.FromMilliseconds(_tempOffsetX / _itemWidth * _timeSpeList[_speIndex]);
- Update();
_totalOffsetX = (_totalOffsetX + _tempOffsetX) % ActualWidth;
_tempOffsetX = 0;
- TimeBar_OnMouseMove(null, null);
+ UpdateMouseFollowBlockPos();
RaiseEvent(new FunctionEventArgs(TimeChangedEvent, this)
{
Info = SelectedTime