提交记录修改UI/Controls/List/BaseList.cs+46 −1看文件
| @@ -26,13 +26,27 @@ namespace UI.Controls.List | ||
| 26 | 26 | } |
| 27 | 27 | |
| 28 | 28 | 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 | 新增: } | |
| 30 | 39 | |
| 31 | 40 | private StackPanel Container; |
| 32 | 41 | |
| 33 | 42 | //private Dictionary<int, BaseListItem> ItemsMap; |
| 34 | 43 | private List<BaseListItem> ItemsMap; |
| 44 | 新增: private ScrollViewer ScrollViewer; | |
| 35 | 45 | |
| 46 | 新增: /// <summary> | |
| 47 | 新增: /// 选择项更改后发生 | |
| 48 | 新增: /// </summary> | |
| 49 | 新增: public event EventHandler SelectedItemChanged; | |
| 36 | 50 | public BaseList() |
| 37 | 51 | { |
| 38 | 52 | DefaultStyleKey = typeof(BaseList); |
| @@ -64,6 +78,8 @@ namespace UI.Controls.List | ||
| 64 | 78 | { |
| 65 | 79 | base.OnApplyTemplate(); |
| 66 | 80 | Container = GetTemplateChild("Container") as StackPanel; |
| 81 | 新增: ScrollViewer = GetTemplateChild("ScrollViewer") as ScrollViewer; | |
| 82 | 新增: | |
| 67 | 83 | Render(); |
| 68 | 84 | } |
| 69 | 85 | |
| @@ -96,6 +112,23 @@ namespace UI.Controls.List | ||
| 96 | 112 | itemControl.Text = item; |
| 97 | 113 | itemControl.MouseLeftButtonUp += ItemClick; |
| 98 | 114 | 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 | 新增: | |
| 99 | 132 | ItemsMap.Add(itemControl); |
| 100 | 133 | Container.Children.Add(itemControl); |
| 101 | 134 | } |
| @@ -118,6 +151,7 @@ namespace UI.Controls.List | ||
| 118 | 151 | ClearSelectedItems(); |
| 119 | 152 | (sender as BaseListItem).IsSelected = true; |
| 120 | 153 | SelectedItem = (sender as BaseListItem).Text; |
| 154 | 新增: SelectedItemChanged?.Invoke(this, EventArgs.Empty); | |
| 121 | 155 | } |
| 122 | 156 | |
| 123 | 157 | private void ClearSelectedItems() |
| @@ -127,5 +161,16 @@ namespace UI.Controls.List | ||
| 127 | 161 | item.IsSelected = false; |
| 128 | 162 | } |
| 129 | 163 | } |
| 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 | 新增: } | |
| 130 | 175 | } |
| 131 | 176 | } |

