提交记录新增UI/Controls/Models/PageModel.cs+21 −0看文件
修改UI/Controls/PageContainer.cs+36 −10看文件
修改UI/UI.csproj+1 −0看文件
| @@ -0,0 +1,21 @@ | ||
| 1 | 新增:using System; | |
| 2 | 新增:using System.Collections.Generic; | |
| 3 | 新增:using System.Linq; | |
| 4 | 新增:using System.Text; | |
| 5 | 新增:using System.Threading.Tasks; | |
| 6 | 新增:using System.Windows.Controls; | |
| 7 | 新增: | |
| 8 | 新增:namespace UI.Controls.Models | |
| 9 | 新增:{ | |
| 10 | 新增: public class PageModel | |
| 11 | 新增: { | |
| 12 | 新增: /// <summary> | |
| 13 | 新增: /// 页面实例 | |
| 14 | 新增: /// </summary> | |
| 15 | 新增: public Page Instance { get; set; } | |
| 16 | 新增: /// <summary> | |
| 17 | 新增: /// 滚动条位置 | |
| 18 | 新增: /// </summary> | |
| 19 | 新增: public double ScrollValue { get; set; } | |
| 20 | 新增: } | |
| 21 | 新增:} | |
| @@ -7,6 +7,7 @@ using System.Threading.Tasks; | ||
| 7 | 7 | using System.Windows; |
| 8 | 8 | using System.Windows.Controls; |
| 9 | 9 | using System.Windows.Input; |
| 10 | 新增:using UI.Controls.Models; | |
| 10 | 11 | using UI.Models; |
| 11 | 12 | |
| 12 | 13 | namespace UI.Controls |
| @@ -61,6 +62,12 @@ namespace UI.Controls | ||
| 61 | 62 | var control = d as PageContainer; |
| 62 | 63 | if (e.NewValue != e.OldValue) |
| 63 | 64 | { |
| 65 | 新增: string oldUri = e.OldValue.ToString(); | |
| 66 | 新增: if (control.PageCache.ContainsKey(oldUri)) | |
| 67 | 新增: { | |
| 68 | 新增: PageModel page = control.PageCache[oldUri]; | |
| 69 | 新增: page.ScrollValue = control.ScrollViewer.VerticalOffset; | |
| 70 | 新增: } | |
| 64 | 71 | control.LoadPage(); |
| 65 | 72 | } |
| 66 | 73 | } |
| @@ -117,8 +124,9 @@ namespace UI.Controls | ||
| 117 | 124 | private readonly string ProjectName; |
| 118 | 125 | private List<string> Historys; |
| 119 | 126 | public int Index = 0, OldIndex = 0; |
| 120 | 删除: private Dictionary<string, Page> PageCache; | |
| 127 | 新增: private Dictionary<string, PageModel> PageCache; | |
| 121 | 128 | private bool IsBack = false; |
| 129 | 新增: private ScrollViewer ScrollViewer; | |
| 122 | 130 | public PageContainer() |
| 123 | 131 | { |
| 124 | 132 | DefaultStyleKey = typeof(PageContainer); |
| @@ -127,7 +135,7 @@ namespace UI.Controls | ||
| 127 | 135 | BackCommand = new Command(new Action<object>(OnBackCommand)); |
| 128 | 136 | NavigationCommands.BrowseBack.InputGestures.Clear(); |
| 129 | 137 | NavigationCommands.BrowseForward.InputGestures.Clear(); |
| 130 | 删除: PageCache = new Dictionary<string, Page>(); | |
| 138 | 新增: PageCache = new Dictionary<string, PageModel>(); | |
| 131 | 139 | } |
| 132 | 140 | |
| 133 | 141 | |
| @@ -135,6 +143,8 @@ namespace UI.Controls | ||
| 135 | 143 | { |
| 136 | 144 | base.OnApplyTemplate(); |
| 137 | 145 | |
| 146 | 新增: ScrollViewer = GetTemplateChild("ScrollViewer") as ScrollViewer; | |
| 147 | 新增: | |
| 138 | 148 | Loaded += PageContainer_Loaded; |
| 139 | 149 | Unloaded += PageContainer_Unloaded; |
| 140 | 150 | } |
| @@ -151,6 +161,7 @@ namespace UI.Controls | ||
| 151 | 161 | private void PageContainer_Loaded(object sender, RoutedEventArgs e) |
| 152 | 162 | { |
| 153 | 163 | Instance = this; |
| 164 | 新增: | |
| 154 | 165 | } |
| 155 | 166 | |
| 156 | 167 | private void OnBackCommand(object obj) |
| @@ -174,9 +185,8 @@ namespace UI.Controls | ||
| 174 | 185 | if (PageCache.ContainsKey(pageUri)) |
| 175 | 186 | { |
| 176 | 187 | var page = PageCache[pageUri]; |
| 177 | 删除: var vm = page.DataContext as ModelBase; | |
| 188 | 新增: var vm = page.Instance.DataContext as ModelBase; | |
| 178 | 189 | vm?.Dispose(); |
| 179 | 删除: page = null; | |
| 180 | 190 | PageCache.Remove(pageUri); |
| 181 | 191 | } |
| 182 | 192 | Historys.RemoveRange(preIndex, 1); |
| @@ -219,12 +229,12 @@ namespace UI.Controls | ||
| 219 | 229 | } |
| 220 | 230 | OldIndex = Index; |
| 221 | 231 | } |
| 222 | 删除: Page page = GetPage(); | |
| 232 | 新增: PageModel page = GetPage(); | |
| 223 | 233 | |
| 224 | 234 | |
| 225 | 235 | if (page != null) |
| 226 | 236 | { |
| 227 | 删除: Content = page; | |
| 237 | 新增: Content = page.Instance; | |
| 228 | 238 | |
| 229 | 239 | // 加入缓存 |
| 230 | 240 | if (!PageCache.ContainsKey(Uri)) |
| @@ -232,6 +242,16 @@ namespace UI.Controls | ||
| 232 | 242 | PageCache.Add(Uri, page); |
| 233 | 243 | } |
| 234 | 244 | |
| 245 | 新增: // 滚动条位置处理 | |
| 246 | 新增: if (IsBack) | |
| 247 | 新增: { | |
| 248 | 新增: ScrollViewer.ScrollToVerticalOffset(page.ScrollValue); | |
| 249 | 新增: } | |
| 250 | 新增: else | |
| 251 | 新增: { | |
| 252 | 新增: ScrollViewer.ScrollToVerticalOffset(0); | |
| 253 | 新增: } | |
| 254 | 新增: | |
| 235 | 255 | OnLoadPaged?.Invoke(this, EventArgs.Empty); |
| 236 | 256 | } |
| 237 | 257 | else |
| @@ -242,7 +262,7 @@ namespace UI.Controls | ||
| 242 | 262 | IsBack = false; |
| 243 | 263 | } |
| 244 | 264 | |
| 245 | 删除: private Page GetPage() | |
| 265 | 新增: private PageModel GetPage() | |
| 246 | 266 | { |
| 247 | 267 | Page page = null; |
| 248 | 268 | if (PageCache.ContainsKey(Uri)) |
| @@ -258,12 +278,18 @@ namespace UI.Controls | ||
| 258 | 278 | page.Unloaded += Page_Unloaded; |
| 259 | 279 | } |
| 260 | 280 | } |
| 261 | 删除: return page; | |
| 281 | 新增: var newPage = new PageModel() | |
| 282 | 新增: { | |
| 283 | 新增: Instance = page, | |
| 284 | 新增: ScrollValue = 0 | |
| 285 | 新增: }; | |
| 286 | 新增: | |
| 287 | 新增: return newPage; | |
| 262 | 288 | } |
| 263 | 289 | private void Page_Unloaded(object sender, RoutedEventArgs e) |
| 264 | 290 | { |
| 265 | 291 | Page page = (Page)sender; |
| 266 | 删除: | |
| 292 | 新增: | |
| 267 | 293 | page.Unloaded -= Page_Unloaded; |
| 268 | 294 | } |
| 269 | 295 | |
| @@ -274,7 +300,7 @@ namespace UI.Controls | ||
| 274 | 300 | foreach (var key in PageCache.Keys) |
| 275 | 301 | { |
| 276 | 302 | var page = PageCache[key]; |
| 277 | 删除: var vm = page.DataContext as ModelBase; | |
| 303 | 新增: var vm = page.Instance.DataContext as ModelBase; | |
| 278 | 304 | vm?.Dispose(); |
| 279 | 305 | } |
| 280 | 306 | PageCache.Clear(); |
| @@ -145,6 +145,7 @@ | ||
| 145 | 145 | <Compile Include="Controls\Input\InputBox.cs" /> |
| 146 | 146 | <Compile Include="Controls\List\BaseList.cs" /> |
| 147 | 147 | <Compile Include="Controls\List\BaseListItem.cs" /> |
| 148 | 新增: <Compile Include="Controls\Models\PageModel.cs" /> | |
| 148 | 149 | <Compile Include="Controls\Navigation\Models\NavigationItemModel.cs" /> |
| 149 | 150 | <Compile Include="Controls\Navigation\Navigation.cs" /> |
| 150 | 151 | <Compile Include="Controls\Navigation\NavigationItem.cs" /> |

