跳到主要内容

github/tai

公开

Tai · Windows 软件与网站使用时长统计。上游 Planshit/Tai 的源码镜像,非灵栈原创;MIT 许可。来源:https://github.com/Planshit/Tai 。本次为手动同步,暂不提供安装包。

提交记录
修改UI/Controls/Charts/Charts.cs+111 −24看文件
@@ -13,6 +13,7 @@ using System.Windows.Media;
1313using System.Windows.Media.Imaging;
1414using System.Windows.Navigation;
1515using System.Windows.Shapes;
16新增:using System.Windows.Threading;
1617using UI.Controls.Base;
1718using UI.Controls.Charts.Model;
1819using UI.Extensions;
@@ -142,9 +143,8 @@ namespace UI.Controls.Charts
142143 private static void OnPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
143144 {
144145 var charts = (d as Charts);
145删除: if (e.Property == DataProperty)
146新增: if (e.Property == DataProperty && e.OldValue != e.NewValue)
146147 {
147删除: var dc = charts.ChartsType;
148148 charts.Render();
149149 }
150150 if (e.Property == IsLoadingProperty)
@@ -171,7 +171,7 @@ namespace UI.Controls.Charts
171171 private StackPanel Container;
172172 private WrapPanel CardContainer;
173173 private Grid MonthContainer;
174删除:
174新增: private ScrollViewer ScrollViewer;
175175 /// <summary>
176176 /// 是否在渲染中
177177 /// </summary>
@@ -180,6 +180,19 @@ namespace UI.Controls.Charts
180180 /// 计算最大值
181181 /// </summary>
182182 private double maxValue = 0;
183新增: /// <summary>
184新增: /// 是否启用懒加载
185新增: /// </summary>
186新增: private bool isLazyloading = false;
187新增: /// <summary>
188新增: /// 项目真实高度
189新增: /// </summary>
190新增: private double itemHeight = 0;
191新增: /// <summary>
192新增: /// 懒加载完成条数
193新增: /// </summary>
194新增: private int lazyloadedCount = 0;
195新增: private List<ChartsDataModel> lazyloadingData;
183196 public Charts()
184197 {
185198 DefaultStyleKey = typeof(Charts);
@@ -190,22 +203,15 @@ namespace UI.Controls.Charts
190203 Container = GetTemplateChild("Container") as StackPanel;
191204 CardContainer = GetTemplateChild("CardContainer") as WrapPanel;
192205 MonthContainer = GetTemplateChild("MonthContainer") as Grid;
206新增: ScrollViewer = GetTemplateChild("ScrollViewer") as ScrollViewer;
193207
194删除: Loaded += Charts_Loaded;
195删除: }
196删除:
197删除: private void Charts_Loaded(object sender, RoutedEventArgs e)
198删除: {
199删除: if (Container != null)
208新增: if (IsLoading)
200209 {
201删除: if (IsLoading)
202删除: {
203删除: RenderLoadingPlaceholder();
204删除: }
205删除: else
206删除: {
207删除: Render();
208删除: }
210新增: RenderLoadingPlaceholder();
211新增: }
212新增: else
213新增: {
214新增: Render();
209215 }
210216 }
211217
@@ -276,7 +282,6 @@ namespace UI.Controls.Charts
276282 }
277283
278284 isRendering = true;
279删除:
280285 switch (ChartsType)
281286 {
282287 case ChartsType.HorizontalA:
@@ -289,31 +294,113 @@ namespace UI.Controls.Charts
289294 RenderMonthStyle();
290295 break;
291296 }
292删除: }
293297
298新增: }
299新增:
294300 #region 渲染横向样式A
295301 private void RenderHorizontalAStyle()
296302 {
297删除:
303新增: lazyloadingData = null;
304新增: isLazyloading = false;
305新增: lazyloadedCount = 0;
306新增: ScrollViewer.ScrollToVerticalOffset(0);
307新增:
298308 var data = Data.OrderByDescending(x => x.Value).ToList();
299309
300删除: foreach (var item in data)
310新增: if (data.Count < 20)
311新增: {
312新增: RenderTypeAItems(data, 0, data.Count);
313新增: }
314新增: else
315新增: {
316新增: isLazyloading = true;
317新增: RenderTypeAItems(data, 0, 20);
318新增: lazyloadingData = data;
319新增: ScrollViewer.ScrollChanged += ScrollViewer_ScrollChanged;
320新增: }
321新增: Container.SizeChanged -= Container_SizeChanged;
322新增: Container.SizeChanged += Container_SizeChanged;
323新增: isRendering = false;
324新增: }
325新增:
326新增: private void Container_SizeChanged(object sender, SizeChangedEventArgs e)
327新增: {
328新增: foreach (var item in Container.Children)
329新增: {
330新增: var control = item as ChartsItemTypeA;
331新增: if (control != null)
332新增: {
333新增: control.UpdateValueBlockWidth();
334新增: }
335新增: }
336新增: }
337新增:
338新增: private void ScrollViewer_ScrollChanged(object sender, ScrollChangedEventArgs e)
339新增: {
340新增: if (ScrollViewer.VerticalOffset > 0 && e.VerticalChange > 0)
301341 {
342新增: double a = ScrollViewer.VerticalOffset * itemHeight;
343新增: double b = itemHeight * lazyloadedCount;
344新增: if (b - a <= ScrollViewer.ActualHeight)
345新增: {
346新增: RenderTypeAItems(lazyloadingData, lazyloadedCount, 20);
347新增: }
348新增: }
349新增:
350新增: if (lazyloadedCount == Data.Count())
351新增: {
352新增: ScrollViewer.ScrollChanged -= ScrollViewer_ScrollChanged;
353新增: }
354新增: }
355新增:
356新增: private void RenderTypeAItems(List<ChartsDataModel> data, int start, int count)
357新增: {
358新增: for (int i = start; i < start + count; i++)
359新增: {
360新增:
361新增: if (i >= data.Count)
362新增: {
363新增: break;
364新增: }
365新增: ChartsDataModel item = data[i];
302366 var chartsItem = new ChartsItemTypeA();
303367 chartsItem.Data = item;
304368 chartsItem.ToolTip = item.PopupText;
305369 chartsItem.MaxValue = maxValue;
306删除:
370新增: if (i == 19 && isLazyloading)
371新增: {
372新增: chartsItem.Loaded += ChartsItem_Loaded;
373新增: }
307374 // 处理点击事件
308375 HandleItemClick(chartsItem, item);
376新增: Container.Children.Insert(lazyloadedCount, chartsItem);
309377
310删除: Container.Children.Add(chartsItem);
311378 if (ShowLimit > 0 && Container.Children.Count == ShowLimit)
312379 {
313380 break;
314381 }
382新增: lazyloadedCount++;
383新增: if (i >= 20)
384新增: {
385新增: Container.Children.RemoveAt(Container.Children.Count - 1);
386新增: }
315387 }
316删除: isRendering = false;
388新增: }
389新增:
390新增: private void ChartsItem_Loaded(object sender, RoutedEventArgs e)
391新增: {
392新增: var chartsItem = (ChartsItemTypeA)sender;
393新增: chartsItem.Loaded -= ChartsItem_Loaded;
394新增:
395新增: int count = Data.Count() - 20;
396新增: for (int i = 0; i < count; i++)
397新增: {
398新增: var pl = new TextBlock();
399新增: pl.Height = chartsItem.ActualHeight;
400新增: Container.Children.Add(pl);
401新增: }
402新增:
403新增: itemHeight = chartsItem.ActualHeight;
317404 }
318405 #endregion
319406 #region 渲染卡片样式Card
修改UI/Controls/Charts/ChartsItemTypeA.cs+13 −2看文件
@@ -73,6 +73,7 @@ namespace UI.Controls.Charts
7373 private TextBlock NameTextObj, ValueTextObj;
7474 private Rectangle ValueBlockObj;
7575 private StackPanel ValueContainer;
76新增: //private Grid ValueContainer;
7677 private Image IconObj;
7778 private bool isRendering = false;
7879 public ChartsItemTypeA()
@@ -85,6 +86,7 @@ namespace UI.Controls.Charts
8586 NameTextObj = GetTemplateChild("NameTextObj") as TextBlock;
8687 ValueTextObj = GetTemplateChild("ValueTextObj") as TextBlock;
8788 ValueBlockObj = GetTemplateChild("ValueBlockObj") as Rectangle;
89新增: //ValueContainer = GetTemplateChild("ValueContainer") as Grid;
8890 ValueContainer = GetTemplateChild("ValueContainer") as StackPanel;
8991
9092 IconObj = GetTemplateChild("IconObj") as Image;
@@ -99,7 +101,7 @@ namespace UI.Controls.Charts
99101
100102 private void Render()
101103 {
102删除: if (isRendering || Data==null)
104新增: if (isRendering || Data == null)
103105 {
104106 return;
105107 }
@@ -114,10 +116,19 @@ namespace UI.Controls.Charts
114116 {
115117 return;
116118 }
117删除: ValueBlockObj.Width = (Data.Value / MaxValue) * (ValueContainer.ActualWidth * 0.95 - ValueTextObj.ActualWidth);
119新增: UpdateValueBlockWidth();
118120 };
119121 }
120122
123新增: public void UpdateValueBlockWidth()
124新增: {
125新增: if (Data == null)
126新增: {
127新增: return;
128新增: }
129新增: ValueBlockObj.Width = (Data.Value / MaxValue) * (ValueContainer.ActualWidth * 0.95 - ValueTextObj.ActualWidth);
130新增: }
131新增:
121132 protected override void OnMouseEnter(MouseEventArgs e)
122133 {
123134 base.OnMouseEnter(e);
修改UI/Themes/Charts/Charts.xaml+5 −4看文件
@@ -5,7 +5,6 @@
55 <Setter Property="SnapsToDevicePixels"
66 Value="true" />
77
8删除:
98 <Setter Property="FontSize" Value="14"/>
109 <Setter Property="Background" Value="Transparent"/>
1110
@@ -14,9 +13,11 @@
1413 <ControlTemplate TargetType="{x:Type local:Charts}">
1514 <Border Background="{TemplateBinding Background}">
1615 <Grid>
17删除: <Grid x:Name="HorizontalA" Visibility="Collapsed">
18删除: <StackPanel x:Name="Container">
19删除: </StackPanel>
16新增: <Grid x:Name="HorizontalA" Visibility="Collapsed">
17新增: <ScrollViewer x:Name="ScrollViewer" VerticalScrollBarVisibility="Auto" Height="{Binding ElementName=HorizontalA,Path=ActualHeight}" CanContentScroll="True">
18新增: <StackPanel x:Name="Container">
19新增: </StackPanel>
20新增: </ScrollViewer>
2021 </Grid>
2122 <Grid x:Name="Card" Visibility="Collapsed">
2223 <WrapPanel x:Name="CardContainer">
修改UI/Themes/Charts/ChartsItemTypeA.xaml+40 −9看文件
@@ -20,11 +20,37 @@
2020 <ColumnDefinition Width="*"/>
2121 </Grid.ColumnDefinitions>
2222 <Grid Margin="0,0,10,0">
23删除: <Border Background="#f3f3f3" CornerRadius="6" Width="50" Height="50" HorizontalAlignment="Left">
23新增: <Border x:Name="IconBorder" BorderBrush="Transparent" BorderThickness="2" Background="#f3f3f3" CornerRadius="6" Width="50" Height="50" HorizontalAlignment="Left">
2424 <Image x:Name="IconObj" Width="25" HorizontalAlignment="Center" VerticalAlignment="Center"/>
2525 </Border>
2626 </Grid>
27删除: <StackPanel Grid.Column="1" x:Name="ValueContainer" VerticalAlignment="Center" >
27新增: <!--<Grid Grid.Column="1" x:Name="ValueContainer" VerticalAlignment="Center" >
28新增: <Grid.RowDefinitions>
29新增: <RowDefinition Height="*"/>
30新增: <RowDefinition Height="*"/>
31新增:
32新增: </Grid.RowDefinitions>
33新增: <TextBlock x:Name="NameTextObj" Foreground="#5c5c5c" HorizontalAlignment="Left"/>
34新增: <Grid Grid.Row="1" >
35新增: <Grid.ColumnDefinitions>
36新增: <ColumnDefinition Width="auto"/>
37新增: <ColumnDefinition Width="auto"/>
38新增:
39新增: </Grid.ColumnDefinitions>
40新增: <Rectangle
41新增: x:Name="ValueBlockObj"
42新增: RadiusX="4"
43新增: RadiusY="4"
44新增: Fill="#cccccc"
45新增: Height="8"
46新增: VerticalAlignment="Center"
47新增: HorizontalAlignment="Left"
48新增: />
49新增:
50新增: <TextBlock Grid.Column="1" x:Name="ValueTextObj" VerticalAlignment="Center" Foreground="#5c5c5c" FontSize="12" Margin="5,0,0,0"/>
51新增: </Grid>
52新增: </Grid>-->
53新增: <StackPanel Grid.Column="1" x:Name="ValueContainer" VerticalAlignment="Center" >
2854 <TextBlock x:Name="NameTextObj" Foreground="#5c5c5c" HorizontalAlignment="Left"/>
2955 <StackPanel Orientation="Horizontal" >
3056 <Rectangle
@@ -88,13 +114,18 @@
88114 <CubicEase EasingMode="EaseInOut"/>
89115 </ColorAnimation.EasingFunction>
90116 </ColorAnimation>
91删除: <!--<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)"
92删除: Storyboard.TargetName="Bg" >
93删除: <EasingColorKeyFrame KeyTime="0"
94删除: Value="#192B20D9"/>
95删除:
96删除: </ColorAnimationUsingKeyFrames>-->
97删除:
117新增: <ColorAnimation Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)"
118新增: Storyboard.TargetName="IconBorder" To="#2b20d9" >
119新增: <ColorAnimation.EasingFunction>
120新增: <CubicEase EasingMode="EaseInOut"/>
121新增: </ColorAnimation.EasingFunction>
122新增: </ColorAnimation>
123新增: <ColorAnimation Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)"
124新增: Storyboard.TargetName="IconBorder" To="#ffffff" >
125新增: <ColorAnimation.EasingFunction>
126新增: <CubicEase EasingMode="EaseInOut"/>
127新增: </ColorAnimation.EasingFunction>
128新增: </ColorAnimation>
98129 </Storyboard>
99130 </VisualState>
100131 <VisualState x:Name="Pressed">