跳到主要内容

github/tai

公开

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

提交记录
修改UI/Controls/List/BaseList.cs+46 −1看文件
@@ -26,13 +26,27 @@ namespace UI.Controls.List
2626 }
2727
2828 public string SelectedItem { get { return (string)GetValue(SelectedItemProperty); } set { SetValue(SelectedItemProperty, value); } }
29删除: public static readonly DependencyProperty SelectedItemProperty = DependencyProperty.Register("SelectedItem", typeof(string), typeof(BaseList));
29新增: public static readonly DependencyProperty SelectedItemProperty = DependencyProperty.Register("SelectedItem", typeof(string), typeof(BaseList), new PropertyMetadata(new PropertyChangedCallback(OnSelectedItemChanged)));
30新增:
31新增: private static void OnSelectedItemChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
32新增: {
33新增: var that = (BaseList)d;
34新增: if (e.NewValue != e.OldValue)
35新增: {
36新增: that.OnSelect();
37新增: }
38新增: }
3039
3140 private StackPanel Container;
3241
3342 //private Dictionary<int, BaseListItem> ItemsMap;
3443 private List<BaseListItem> ItemsMap;
44新增: private ScrollViewer ScrollViewer;
3545
46新增: /// <summary>
47新增: /// 选择项更改后发生
48新增: /// </summary>
49新增: public event EventHandler SelectedItemChanged;
3650 public BaseList()
3751 {
3852 DefaultStyleKey = typeof(BaseList);
@@ -64,6 +78,8 @@ namespace UI.Controls.List
6478 {
6579 base.OnApplyTemplate();
6680 Container = GetTemplateChild("Container") as StackPanel;
81新增: ScrollViewer = GetTemplateChild("ScrollViewer") as ScrollViewer;
82新增:
6783 Render();
6884 }
6985
@@ -96,6 +112,23 @@ namespace UI.Controls.List
96112 itemControl.Text = item;
97113 itemControl.MouseLeftButtonUp += ItemClick;
98114 itemControl.MouseRightButtonUp += ItemClick;
115新增: bool isHandleSelected = false;
116新增: if (SelectedItem == item)
117新增: {
118新增: itemControl.IsSelected = true;
119新增:
120新增: itemControl.Loaded += (e, c) =>
121新增: {
122新增: if (isHandleSelected)
123新增: {
124新增: return;
125新增: }
126新增: isHandleSelected = true;
127新增: ScrollViewer.ScrollToVerticalOffset(itemControl.TransformToAncestor(Container)
128新增: .Transform(new Point(0, 0)).Y);
129新增: };
130新增: }
131新增:
99132 ItemsMap.Add(itemControl);
100133 Container.Children.Add(itemControl);
101134 }
@@ -118,6 +151,7 @@ namespace UI.Controls.List
118151 ClearSelectedItems();
119152 (sender as BaseListItem).IsSelected = true;
120153 SelectedItem = (sender as BaseListItem).Text;
154新增: SelectedItemChanged?.Invoke(this, EventArgs.Empty);
121155 }
122156
123157 private void ClearSelectedItems()
@@ -127,5 +161,16 @@ namespace UI.Controls.List
127161 item.IsSelected = false;
128162 }
129163 }
164新增:
165新增:
166新增: private void OnSelect()
167新增: {
168新增: ClearSelectedItems();
169新增: var control = ItemsMap.Where(m => m.Text == SelectedItem).FirstOrDefault();
170新增: if (control != null)
171新增: {
172新增: control.IsSelected = true;
173新增: }
174新增: }
130175 }
131176}