跳到主要内容

github/tai

公开

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

提交记录
修改UI/Controls/DatePickerBar/DatePickerBar.cs+76 −21看文件
@@ -22,7 +22,7 @@ namespace UI.Controls.DatePickerBar
2222 set { SetValue(ShowTypeProperty, value); }
2323 }
2424 public static readonly DependencyProperty ShowTypeProperty =
25删除: DependencyProperty.Register("ShowType", typeof(DatePickerShowType), typeof(DatePickerBar), new PropertyMetadata(DatePickerShowType.Day,new PropertyChangedCallback(OnShowTypeChanged)));
25新增: DependencyProperty.Register("ShowType", typeof(DatePickerShowType), typeof(DatePickerBar), new PropertyMetadata(DatePickerShowType.Day, new PropertyChangedCallback(OnShowTypeChanged)));
2626
2727 private static void OnShowTypeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
2828 {
@@ -64,6 +64,8 @@ namespace UI.Controls.DatePickerBar
6464 private Dictionary<DateTime, DatePickerBarItem> ItemsDictionary;
6565 private List<DateTime> DateList;
6666
67新增: private int dataCount = 0;
68新增: private int renderIndex = 0;
6769 // 选中标记块
6870 private Border ActiveBlock;
6971 // 动画
@@ -85,9 +87,12 @@ namespace UI.Controls.DatePickerBar
8587 ActiveBlock = GetTemplateChild("ActiveBlock") as Border;
8688 ScrollViewer = GetTemplateChild("ScrollViewer") as ScrollViewer;
8789 Render();
90新增:
91新增:
8892 }
8993
9094
95新增:
9196 private void AddItem(DateTime date)
9297 {
9398 if (Container != null)
@@ -96,7 +101,7 @@ namespace UI.Controls.DatePickerBar
96101 {
97102 return;
98103 }
99删除:
104新增: renderIndex++;
100105 var control = new DatePickerBarItem();
101106 control.Title = date.Day.ToString();
102107 control.Date = date;
@@ -108,14 +113,26 @@ namespace UI.Controls.DatePickerBar
108113 }
109114 ScrollToActive(date);
110115 };
111删除: control.Loaded += (e, c) =>
116新增:
117新增: if (renderIndex == dataCount)
112118 {
113删除: if (date == DateTime.Now.Date)
119新增:
120新增: control.Loaded += (e, c) =>
114121 {
115删除: SelectedDate = DateTime.Now.Date;
116删除: }
117删除: };
118122
123新增: if (SelectedDate == DateTime.MinValue)
124新增: {
125新增: if (date == DateTime.Now.Date)
126新增: {
127新增: SelectedDate = DateTime.Now.Date;
128新增: }
129新增: }
130新增: else
131新增: {
132新增: ScrollToActive(SelectedDate);
133新增: }
134新增: };
135新增: }
119136 // 后一天
120137 int next = DateList.IndexOf(date.AddDays(+1));
121138
@@ -152,18 +169,23 @@ namespace UI.Controls.DatePickerBar
152169
153170 private void Render()
154171 {
155删除: if(Container == null)
172新增: if (Container == null)
156173 {
157174 return;
158175 }
176新增: dataCount = 0;
177新增: renderIndex = 0;
178新增:
159179 DateList.Clear();
160180 ItemsDictionary.Clear();
161181 Container.Children.Clear();
162182
163183 if (ShowType == DatePickerShowType.Day)
164184 {
185新增: dataCount = 41;
186新增:
165187 // 前30天
166删除: for (int i = 1; i < 30; i++)
188新增: for (int i = 1; i < 31; i++)
167189 {
168190 AddItem(DateTime.Now.Date.AddDays(-i));
169191 }
@@ -171,15 +193,16 @@ namespace UI.Controls.DatePickerBar
171193 AddItem(DateTime.Now.Date);
172194
173195 // 后十天
174删除: for (int i = 1; i < 10; i++)
196新增: for (int i = 1; i < 11; i++)
175197 {
176198 AddItem(DateTime.Now.Date.AddDays(+i));
177199 }
178删除:
179200 }
180201
181202 if (ShowType == DatePickerShowType.Month)
182203 {
204新增: dataCount = 12;
205新增:
183206 var nowDate = DateTime.Now;
184207 for (int i = 1; i < 13; i++)
185208 {
@@ -201,6 +224,7 @@ namespace UI.Controls.DatePickerBar
201224 {
202225 return;
203226 }
227新增: renderIndex++;
204228
205229 var control = new DatePickerBarItem();
206230 control.Title = date.Month.ToString();
@@ -213,34 +237,65 @@ namespace UI.Controls.DatePickerBar
213237 }
214238 ScrollToActive(date);
215239 };
216删除: control.Loaded += (e, c) =>
240新增:
241新增: if (renderIndex == dataCount)
217242 {
218删除: if (date.Year == DateTime.Now.Date.Year
219删除: && date.Month == DateTime.Now.Date.Month)
243新增: control.Loaded += (e, c) =>
220244 {
221删除: SelectedDate = date;
222删除: }
223删除: };
245新增: if (SelectedDate == DateTime.MinValue)
246新增: {
247新增: if (date.Year == DateTime.Now.Date.Year
248新增: && date.Month == DateTime.Now.Date.Month)
249新增: {
250新增: SelectedDate = date;
251新增: }
252新增: }
253新增: else
254新增: {
255新增: ScrollToActive(SelectedDate);
256新增: }
257新增: };
258新增: }
224259
225260
226261 DateList.Add(date);
227262 ItemsDictionary.Add(date, control);
228263 Container.Children.Add(control);
229删除:
230264 }
231265 }
232266
233267 private void ScrollToActive(DateTime date)
234268 {
235删除: if (ItemsDictionary.ContainsKey(SelectedDate))
269新增:
270新增: if (ItemsDictionary.Count == 0)
236271 {
237删除: ItemsDictionary[SelectedDate].IsSelected = false;
272新增: return;
273新增: }
274新增: if (ShowType == DatePickerShowType.Month)
275新增: {
276新增: date = new DateTime(date.Year, date.Month, 1);
238277 }
239278 else
279新增: {
280新增: date = new DateTime(date.Year, date.Month, date.Day);
281新增: }
282新增:
283新增: if (!ItemsDictionary.ContainsKey(date))
240284 {
241285 return;
242286 }
243删除: SelectedDate = date;
287新增: if (ItemsDictionary.ContainsKey(SelectedDate))
288新增: {
289新增: // 如果存在旧的选中,先取消
290新增: ItemsDictionary[SelectedDate].IsSelected = false;
291新增: }
292新增:
293新增: if (date != SelectedDate)
294新增: {
295新增: SelectedDate = date;
296新增: }
297新增:
298新增:
244299 ItemsDictionary[date].IsSelected = true;
245300
246301