# 淇敼璁板綍 ## 2025骞翠慨鏀硅褰? ### 娣诲姞鍥剧墖鎸夊悕绉版帓搴忓姛鑳?- **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 鍦ㄥ浘鐗囨祻瑙堥〉闈㈡坊鍔犳寜鏂囦欢鍚嶆帓搴忓姛鑳斤紝鏀寔鑷劧鎺掑簭锛堟暟瀛楁枃浠跺悕姝g‘鎺掑簭锛?- **鍔熻兘瀹炵幇**: - 鉁?瀹炵幇 `NaturalStringComparer` 鑷劧鎺掑簭姣旇緝鍣? - 鉁?鏀寔鏁板瓧鏂囦欢鍚嶆帓搴忥紙濡?1.jpg, 2.jpg, 10.jpg 鎸夋暟瀛楅『搴忔帓搴忥級 - 鉁?鍦ㄦ枃浠舵壂鎻忓畬鎴愬悗鑷姩鎺掑簭 - 鉁?鎸夋枃浠跺悕鎺掑簭锛屽鏋滄枃浠跺悕鐩稿悓鍒欐寜瀹屾暣璺緞鎺掑簭 - **淇敼鏂囦欢**: - `AuroraDesk.Presentation/ViewModels/Pages/ImageGalleryPageViewModel.cs` (娣诲姞鎺掑簭閫昏緫鍜屾瘮杈冨櫒) - **鎶€鏈粏鑺?*: - 鑷劧鎺掑簭锛氭暟瀛楅儴鍒嗘寜鏁板€煎ぇ灏忔瘮杈冿紝鑰屼笉鏄瓧绗︿覆姣旇緝 - 鎺掑簭鏃舵満锛氬湪鏀堕泦瀹屾墍鏈夋枃浠惰矾寰勫悗锛屽垱寤鸿櫄鎷熷寲绐楀彛涔嬪墠 - 鎺掑簭鏂瑰紡锛氭寜鏂囦欢鍚嶏紙涓嶅惈璺緞锛夋帓搴忥紝鏂囦欢鍚嶇浉鍚屾椂鎸夊畬鏁磋矾寰勬帓搴? - 涓嶅尯鍒嗗ぇ灏忓啓锛氬瓧绗︽瘮杈冧笉鍖哄垎澶у皬鍐?- **鏁堟灉**: - 鉁?鍥剧墖鎸夋枃浠跺悕鏈夊簭鏄剧ず - 鉁?鏁板瓧鏂囦欢鍚嶆纭帓搴忥紙1, 2, 10 鑰屼笉鏄?1, 10, 2锛? - 鉁?鏀寔娣峰悎鏂囦欢鍚嶏紙瀛楁瘝+鏁板瓧锛夌殑姝g‘鎺掑簭 ### 淇婊戝姩鏃堕〉鏁颁笉鏇存柊闂 - **鏃ユ湡**: 2025骞?鏈?- **闂**: 婊戝姩鍒板簳閮ㄦ椂椤垫暟涓嶆洿鏂帮紝濮嬬粓鏄剧ず绗?椤?- **鍘熷洜**: 鍙鍖哄煙绱㈠紩璁$畻鏂瑰紡涓嶆纭紝娌℃湁鑰冭檻 WrapPanel 鐨勫姩鎬佸竷灞€鍜屾粴鍔ㄧ櫨鍒嗘瘮 - **淇敼鍐呭**: 鏀圭敤婊氬姩鐧惧垎姣旇绠楀彲瑙佸尯鍩熺储寮?- **淇敼鏂囦欢**: - `AuroraDesk.Presentation/Views/Pages/ImageGalleryPageView.axaml.cs` (鏀硅繘鍙鍖哄煙璁$畻閫昏緫) - **鎶€鏈敼杩?*: - 浣跨敤婊氬姩鐧惧垎姣旓細`scrollOffset / (extentHeight - viewportHeight)` 璁$畻婊氬姩浣嶇疆 - 鏍规嵁婊氬姩鐧惧垎姣斿拰鎬婚」鐩暟璁$畻鍙鍖哄煙璧峰绱㈠紩 - 鑰冭檻 WrapPanel 甯冨眬锛堟瘡琛岀害6涓」鐩紝姣忛〉绾?琛岋級 - 娣诲姞杈圭晫妫€鏌ワ紝纭繚璁$畻鐨勭储寮曞湪鏈夋晥鑼冨洿鍐?- **淇缁撴灉**: - 鉁?婊氬姩鏃堕〉鏁板疄鏃舵洿鏂? - 鉁?婊氬姩鍒板簳閮ㄦ椂椤垫暟姝g‘鏄剧ず鏈€鍚庝竴椤? - 鉁?椤垫暟璁$畻鍑嗙‘锛屼笌婊氬姩浣嶇疆鍚屾 ### 娣诲姞 ImageGalleryPageView 婊戝姩椤垫暟鏄剧ず鍔熻兘 - **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 鍦ㄥ浘鐗囨祻瑙堥〉闈㈡坊鍔犳粦鍔ㄦ椂鐨勫綋鍓嶉〉鏁版樉绀?- **鍔熻兘瀹炵幇**: - 鉁?鍦?ViewModel 涓坊鍔?`CurrentPage` 鍜?`TotalPages` 灞炴€? - 鉁?娣诲姞 `PageInfo` 灞炴€э紙鏍煎紡锛氬綋鍓嶉〉 / 鎬婚〉鏁帮級 - 鉁?鏍规嵁鍙鍖哄煙璧峰绱㈠紩璁$畻褰撳墠椤垫暟 - 鉁?鍦?UI 涓樉绀洪〉鏁颁俊鎭紙钃濊壊楂樹寒鏄剧ず锛?- **淇敼鏂囦欢**: - `AuroraDesk.Presentation/ViewModels/Pages/ImageGalleryPageViewModel.cs` (娣诲姞椤垫暟璺熻釜閫昏緫) - `AuroraDesk.Presentation/Views/Pages/ImageGalleryPageView.axaml` (娣诲姞椤垫暟鏄剧ずUI) - **鎶€鏈粏鑺?*: - 姣忛〉鏄剧ず椤圭洰鏁帮細18涓紙鏍规嵁UI甯冨眬浼扮畻锛氱獥鍙e搴︾害1200px锛屾瘡琛岀害6涓紝姣忛〉绾?琛岋級 - 椤垫暟璁$畻锛氭牴鎹彲瑙佸尯鍩熻捣濮嬬储寮曞拰鎬婚」鐩暟璁$畻 - 瀹炴椂鏇存柊锛氭粴鍔ㄦ椂鑷姩鏇存柊褰撳墠椤垫暟 - **鏁堟灉**: - 鉁?鐢ㄦ埛婊戝姩鏃跺彲浠ユ竻妤氱湅鍒板綋鍓嶅湪绗嚑椤? - 鉁?椤垫暟淇℃伅浠ヨ摑鑹查珮浜樉绀猴紝鏄撲簬璇嗗埆 - 鉁?椤垫暟鏍煎紡锛氱 X / Y 椤? ### 浼樺寲 ImageGalleryPageViewModel 鍐椾綑浠g爜 - **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 绉婚櫎鏈娇鐢ㄧ殑浠g爜锛屾彁鍙栧叕鍏辨柟娉曪紝浼樺寲浠g爜缁撴瀯 - **涓昏浼樺寲**: - 鉁?鍒犻櫎鏈娇鐢ㄧ殑缂╃暐鍥惧姞杞介槦鍒楃浉鍏充唬鐮侊紙`ThumbnailLoadQueue`銆乣ProcessThumbnailLoadQueueAsync`銆乣RequestThumbnailLoad`銆乣ThumbnailLoadTask`锛? - 鉁?鎻愬彇 `CreateImageItemsAsync` 鏂规硶锛屽鐢?ImageItem 鍒涘缓閫昏緫 - 鉁?鎻愬彇 `CreateImageItem` 闈欐€佹柟娉曪紝缁熶竴鏂囦欢淇℃伅鑾峰彇閫昏緫 - 鉁?鎻愬彇 `UpdateStatusAsync` 鏂规硶锛岀畝鍖栫姸鎬佹洿鏂颁唬鐮? - 鉁?浼樺寲铏氭嫙鍖栫獥鍙f洿鏂伴€昏緫锛屼娇鐢ㄥ瓧鍏哥紦瀛樿矾寰勫埌绱㈠紩鐨勬槧灏? - 鉁?浼樺寲绱㈠紩鏌ユ壘鎬ц兘锛岄伩鍏嶉噸澶嶈皟鐢?`IndexOf` - **淇敼鏂囦欢**: - `AuroraDesk.Presentation/ViewModels/Pages/ImageGalleryPageViewModel.cs` (浠g爜閲嶆瀯鍜屼紭鍖? - **浠g爜鍑忓皯**: - 鍒犻櫎浜嗙害 70 琛屾湭浣跨敤鐨勪唬鐮? - 鎻愬彇浜?3 涓叕鍏辨柟娉曪紝鍑忓皯浠g爜閲嶅 - 浼樺寲浜嗘€ц兘锛屽噺灏戜簡閲嶅鐨勭储寮曟煡鎵炬搷浣? ### 淇 ImageGalleryPageView XAML 缁戝畾閿欒 - **鏃ユ湡**: 2025骞?鏈?- **闂**: XAML 缁戝畾閿欒锛屾棤娉曡В鏋?`$parent[reactive:ReactiveUserControl]` - **閿欒淇℃伅**: `Unable to resolve type ReactiveUserControl from namespace using:ReactiveUI.Avalonia` - **淇敼鍐呭**: 灏嗙粦瀹氳娉曚粠 `$parent[reactive:ReactiveUserControl]` 鏀逛负 `$parent[UserControl]` - **淇敼鏂囦欢**: - `AuroraDesk.Presentation/Views/Pages/ImageGalleryPageView.axaml` (淇缁戝畾璇硶) - **鎶€鏈鏄?*: - 鍦?Avalonia 涓紝`ReactiveUserControl` 缁ф壙鑷?`UserControl` - 浣跨敤 `$parent[UserControl]` 鍙互姝g‘璁块棶鐖剁骇鐨?DataContext - 杩欎笌椤圭洰涓?`IconsPageView.axaml` 鐨勭敤娉曚繚鎸佷竴鑷?- **淇缁撴灉**: - 鉁?鏋勫缓鎴愬姛锛屾棤閿欒 - 鉁?XAML 缁戝畾姝e父宸ヤ綔 ### 閲嶆瀯 ImageGalleryPageView 鍜?ImageGalleryPageViewModel - 鎸夌収 Windows 11 鏂囦欢璧勬簮绠$悊鍣ㄥ師鐞嗕紭鍖?- **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 鎸夌収 Windows 11 鏂囦欢璧勬簮绠$悊鍣ㄩ珮鏁堝鐞嗙櫨涓囧紶鍥剧墖鐨勫師鐞嗭紝鍏ㄩ潰閲嶆瀯鍥剧墖娴忚鍔熻兘 - **鏍稿績鍘熺悊**: 1. **鍙樉绀虹缉鐣ュ浘**锛氶伩鍏嶅叏鍒嗚鲸鐜囧姞杞斤紝鍑忓皯璧勬簮娑堣€? - 浣跨敤 ThumbnailCacheService 绠$悊缂╃暐鍥撅紙鍐呭瓨+纾佺洏缂撳瓨锛? - 缂╃暐鍥惧ぇ灏?184x184锛屼綋绉粎涓哄師鍥剧殑鍑犲垎涔嬩竴 - 鎸夐渶鐢熸垚锛岀紦瀛樺鐢紝閬垮厤閲嶅璁$畻 2. **鍙覆鏌撳彲瑙佹帶浠?*锛氳櫄鎷熷寲鍒楄〃锛屽姩鎬佺鐞?UI 鍏冪礌 - 鍙繚瀛樻枃浠惰矾寰勫垪琛紙鏈€灏忓唴瀛樺崰鐢級 - 鍙垱寤鸿櫄鎷熷寲绐楀彛鍐呯殑椤圭洰锛堝墠鍚庡悇500涓紝鍏?000涓級 - 婊氬姩鏃跺姩鎬佸姞杞?鍗歌浇锛屽洖鏀朵笉鍙鐨勬帶浠? 3. **鍚庡彴寮傛鍔犺浇**锛氬绾跨▼瑙h€︼紝淇濇寔 UI 鍝嶅簲鎬? - 鏂囦欢鎵弿鍦ㄥ悗鍙扮嚎绋嬭繘琛岋紝涓嶉樆濉?UI - 缂╃暐鍥剧敓鎴愪娇鐢ㄧ嚎绋嬫睜锛屾敮鎸佸苟鍙戝拰浼樺厛绾? - 浠诲姟闃熷垪绠$悊锛屾敮鎸佸彇娑堝拰杩涘害鍙嶉 - **淇敼鏂囦欢**: - `AuroraDesk.Presentation/Services/ThumbnailCacheService.cs` (鏂板缓 - 缂╃暐鍥剧紦瀛樻湇鍔? - `AuroraDesk.Presentation/ViewModels/Pages/ImageGalleryPageViewModel.cs` (閲嶆瀯 - 浼樺寲铏氭嫙鍖栧拰鍚庡彴鍔犺浇) - `AuroraDesk.Presentation/Views/Pages/ImageGalleryPageView.axaml.cs` (閲嶆瀯 - 娣诲姞婊氬姩妫€娴? - `AuroraDesk.Presentation/Views/Pages/ImageGalleryPageView.axaml` (鏇存柊 - 娣诲姞 ListBox 鍚嶇О) - **涓昏瀹炵幇**: - 鉁?**ThumbnailCacheService锛堢缉鐣ュ浘缂撳瓨鏈嶅姟锛?*: - 鍐呭瓨缂撳瓨锛歀RU 绛栫暐锛屾渶澶氱紦瀛?1000 寮犵缉鐣ュ浘 - 纾佺洏缂撳瓨锛氭寔涔呭寲瀛樺偍鍒扮郴缁熶复鏃剁洰褰曪紝閬垮厤閲嶅鐢熸垚 - 缂撳瓨杩囨湡锛氳嚜鍔ㄦ竻鐞嗚繃鏈熺紦瀛橈紙7澶╄繃鏈燂級 - 寮傛鍔犺浇锛氫笉闃诲 UI 绾跨▼ - 鍝堝笇绱㈠紩锛氫娇鐢?SHA256 鍝堝笇鏂囦欢璺緞锛岄伩鍏嶆枃浠跺悕鍐茬獊 - 鉁?**ViewModel 浼樺寲**: - 铏氭嫙鍖栫獥鍙g鐞嗭細鍙垱寤哄彲瑙佸尯鍩熷墠鍚庡悇500涓」鐩? - 鍚庡彴浠诲姟闃熷垪锛氫娇鐢?SemaphoreSlim 鎺у埗骞跺彂鏁帮紙CPU鏍稿績鏁?2锛屾渶澶?涓級 - 缂╃暐鍥惧姞杞介槦鍒楋細浼樺厛绾ч槦鍒楋紝鏀寔鍙栨秷鍜岃繘搴﹀弽棣? - 鏂囦欢鎵弿浼樺寲锛氭祦寮忓鐞嗭紝姣?000涓枃浠舵洿鏂颁竴娆I - 鉁?**View 婊氬姩妫€娴?*: - 鐩戝惉 ScrollViewer 鐨勬粴鍔ㄤ簨浠? - 鏍规嵁婊氬姩浣嶇疆浼扮畻鍙鍖哄煙 - 鍔ㄦ€佹洿鏂拌櫄鎷熷寲绐楀彛锛堥槻鎶栧鐞嗭紝閬垮厤棰戠箒鏇存柊锛? - 鑷姩瑙﹀彂缂╃暐鍥惧姞杞?- **鎶€鏈粏鑺?*: - 缂╃暐鍥剧紦瀛樿矾寰勶細`%TEMP%\AuroraDesk\ThumbnailCache` - 鍐呭瓨缂撳瓨鏈€澶уぇ灏忥細1000 寮犵缉鐣ュ浘锛圠RU 绛栫暐锛? - 纾佺洏缂撳瓨杩囨湡鏃堕棿锛?澶? - 铏氭嫙鍖栫獥鍙eぇ灏忥細鍓嶅悗鍚?00涓紝鍏?000涓」鐩? - 鏈€澶у苟鍙戠缉鐣ュ浘鍔犺浇鏁帮細CPU鏍稿績鏁?2锛屾渶澶?涓? - 婊氬姩妫€娴嬮槻鎶栧欢杩燂細100ms - **鎬ц兘鎻愬崌**: - 鉁?**鍐呭瓨鍗犵敤鍑忓皯 99%+**锛氬彧淇濆瓨鏂囦欢璺緞鍒楄〃锛岃€屼笉鏄墍鏈?ImageItem 瀵硅薄 - 鉁?**鍔犺浇閫熷害鎻愬崌**锛氱鐩樼紦瀛橀伩鍏嶉噸澶嶇敓鎴愮缉鐣ュ浘 - 鉁?**UI 鍝嶅簲鎬ф彁鍗?*锛氬悗鍙板紓姝ュ姞杞斤紝UI 濮嬬粓淇濇寔 60 FPS - 鉁?**鏀寔鐧句竾绾у浘鐗?*锛氳櫄鎷熷寲纭繚鍙覆鏌撳彲瑙侀」鐩紝鍐呭瓨鍗犵敤鎭掑畾 - **鏁堟灉**: - 鉁?**绔嬪嵆鏄剧ず**锛氭枃浠惰矾寰勬壂鎻忓悗绔嬪嵆鏄剧ず铏氭嫙鍖栫獥鍙? - 鉁?**娴佺晠婊氬姩**锛氳櫄鎷熷寲纭繚婊氬姩娴佺晠锛屽彧娓叉煋鍙椤圭洰 - 鉁?**鍐呭瓨浼樺寲**锛氭渶澶?000涓」鐩湪鍐呭瓨涓紝鑰屼笉鏄櫨涓囦釜 - 鉁?**缂撳瓨澶嶇敤**锛氱鐩樼紦瀛橀伩鍏嶉噸澶嶇敓鎴愶紝鎻愬崌鍔犺浇閫熷害 - 鉁?**瀹屽叏绗﹀悎 Windows 11 鎬濊矾**锛氳櫄鎷熷寲銆佹寜闇€鍔犺浇銆佸悗鍙板紓姝ャ€佸彧娓叉煋鍙鎺т欢 ### 淇 dotnet build 鏋勫缓閿欒 - **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 淇鎵€鏈夋瀯寤洪敊璇紝浣块」鐩兘澶熸垚鍔熸瀯寤?- **闂**: `dotnet build` 鏃跺嚭鐜板涓敊璇細 1. `Avalonia.AvaloniaEdit` 鍛藉悕绌洪棿閿欒 - 鎵句笉鍒扮浉鍏崇被鍨? 2. `DisposeWith` 鎵╁睍鏂规硶鎵句笉鍒? 3. `ImageConverters.cs` 涓殑绫诲瀷杞崲鍜屽懡鍚嶇┖闂撮敊璇? 4. XAML 鏂囦欢涓殑鍛藉悕绌洪棿鍜屾牱寮忛€夋嫨鍣ㄩ敊璇?- **淇敼鏂囦欢**: - `AuroraDesk.Presentation/Attached/TextEditorAssist.cs` (淇鍛藉悕绌洪棿) - `AuroraDesk.Presentation/Attached/TextMateHelper.cs` (淇鍛藉悕绌洪棿) - `AuroraDesk.Presentation/ViewModels/Pages/EditorPageViewModel.cs` (淇鍛藉悕绌洪棿) - `AuroraDesk.Presentation/Views/MainWindow.axaml.cs` (淇 DisposeWith 浣跨敤) - `AuroraDesk.Presentation/ViewModels/MainWindowViewModel.cs` (淇 DisposeWith 浣跨敤) - `AuroraDesk.Presentation/Converters/ImageConverters.cs` (淇绫诲瀷杞崲鍜屽懡鍚嶇┖闂? - `AuroraDesk.Presentation/Views/Pages/EditorPageView.axaml` (淇鍛藉悕绌洪棿鍜屾牱寮? - `AuroraDesk.Presentation/Views/Pages/ImageGalleryPageView.axaml` (淇鏍峰紡璁剧疆) - **涓昏鏇存柊**: - 鉁?**AvaloniaEdit 鍛藉悕绌洪棿淇**: - 灏?`using Avalonia.AvaloniaEdit;` 鏀逛负 `using AvaloniaEdit;` - 灏?`using Avalonia.AvaloniaEdit.Document;` 鏀逛负 `using AvaloniaEdit.Document;` - XAML 涓殑鍛藉悕绌洪棿浠?`clr-namespace:Avalonia.AvaloniaEdit;assembly=AvaloniaEdit` 鏀逛负 `clr-namespace:AvaloniaEdit;assembly=AvaloniaEdit` - 鉁?**DisposeWith 鎵╁睍鏂规硶淇**: - 灏?`DisposeWith(disposables)` 鏀逛负浣跨敤 `CompositeDisposable.Add()` 鏂规硶 - 鍦?`MainWindow.axaml.cs` 涓紝灏?`RegisterHandler` 鐨勮繑鍥炲€兼坊鍔犲埌 `disposables` - 鍦?`MainWindowViewModel.cs` 涓紝灏嗘墍鏈夎闃呭寘瑁呭湪 `_disposables.Add()` 涓? - 鉁?**ImageConverters 淇**: - 淇 `Bitmap` 鍏嬮殕鏂规硶锛屼娇鐢?`MemoryStream` 鍜?`Save` 鏂规硶 - 灏?`Avalonia.Visuals.Media.Imaging.BitmapInterpolationMode` 鏀逛负 `Avalonia.Media.Imaging.BitmapInterpolationMode` - 鉁?**XAML 鏍峰紡淇**: - 绉婚櫎 `EditorPageView.axaml` 涓笉鏀寔鐨勫祵濂楁牱寮忛€夋嫨鍣? - 灏?`ListBox.ItemContainerStyle` 鏀逛负 `ListBox.Styles` - 绠€鍖?`TextEditor` 鐨勬牱寮忚缃紝鐩存帴浣跨敤灞炴€х粦瀹?- **鎶€鏈粏鑺?*: - AvaloniaEdit 鐨勬纭懡鍚嶇┖闂存槸 `AvaloniaEdit`锛岃€屼笉鏄?`Avalonia.AvaloniaEdit` - ReactiveUI 鐨?`DisposeWith` 鎵╁睍鏂规硶鍦ㄦ煇浜涚増鏈腑鍙兘涓嶅彲鐢紝搴斾娇鐢?`CompositeDisposable.Add()` 鏇夸唬 - Avalonia XAML 涓殑鏍峰紡閫夋嫨鍣ㄨ娉曚笌 WPF 鏈夋墍涓嶅悓锛岄渶瑕侀伒寰?Avalonia 鐨勮鑼?- **鏋勫缓缁撴灉**: - 鉁?鏋勫缓鎴愬姛锛屾棤閿欒 - 鈿狅笍 浠嶆湁 8 涓鍛婏紙涓昏鏄?NuGet 鍖呯増鏈鍛婂拰鏈娇鐢ㄧ殑瀛楁璀﹀憡锛? ### 淇 AvaloniaEdit 绋嬪簭闆嗗紩鐢ㄩ棶棰?- **鏃ユ湡**: 2025骞?1鏈?鏃?- **淇敼鍐呭**: 淇 `Avalonia.AvaloniaEdit` 鍖呯殑绋嬪簭闆嗗紩鐢ㄩ棶棰?- **闂**: 鏋勫缓鏃跺嚭鐜伴敊璇紝鎵句笉鍒?`Avalonia.AvaloniaEdit` 鍛藉悕绌洪棿锛屾彁绀虹己灏戠▼搴忛泦寮曠敤 - **淇敼鏂囦欢**: - `AuroraDesk.Presentation/Views/Pages/EditorPageView.axaml` (淇 XAML 涓殑绋嬪簭闆嗗紩鐢? - **涓昏鏇存柊**: - 鉁?**XAML 绋嬪簭闆嗗紩鐢ㄤ慨澶?*: - 灏?`assembly=Avalonia.AvaloniaEdit` 鏀逛负 `assembly=AvaloniaEdit` - 鍛藉悕绌洪棿淇濇寔涓?`clr-namespace:Avalonia.AvaloniaEdit` - 鏍规嵁 `App.axaml` 涓殑璧勬簮璺緞 `avares://AvaloniaEdit` 鍒ゆ柇锛岀▼搴忛泦鍚嶇О搴斾负 `AvaloniaEdit` - **鎶€鏈粏鑺?*: - `Avalonia.AvaloniaEdit` 11.3.0 鍖呯殑绋嬪簭闆嗗悕绉版槸 `AvaloniaEdit`锛岃€屼笉鏄?`Avalonia.AvaloniaEdit` - 鍛藉悕绌洪棿鏄?`Avalonia.AvaloniaEdit`锛屼絾绋嬪簭闆嗗悕绉版槸 `AvaloniaEdit` - XAML 涓殑 `assembly` 灞炴€ч渶瑕佹寚瀹氬疄闄呯殑绋嬪簭闆嗗悕绉帮紝鑰屼笉鏄寘鍚?- **娉ㄦ剰浜嬮」**: - 鈿狅笍 鐩墠鐢变簬 NuGet 缂撳瓨鏉冮檺闂锛屾瀯寤烘殏鏃跺け璐? - 闇€瑕佽В鍐?NuGet 缂撳瓨鏉冮檺闂鍚庢墠鑳介獙璇佷慨澶嶆槸鍚︽垚鍔?- **鍚庣画姝ラ**: - 瑙e喅 NuGet 缂撳瓨鏉冮檺闂锛堝彲鑳介渶瑕侀噸鍚垨鍏抽棴閿佸畾鏂囦欢鐨勮繘绋嬶級 - 閲嶆柊杩樺師鍜屾瀯寤洪」鐩? - 楠岃瘉 AvaloniaEdit 鐩稿叧鍔熻兘鏄惁姝e父 ### 瀹炵幇鍥剧墖娴忚椤甸潰 - 鏀寔鐩綍閫夋嫨鍜屽姞杞藉ぇ閲忓浘鐗囷紙10涓囧紶锛?- **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 鍒涘缓涓€涓柊鐨勫浘鐗囨祻瑙堥〉闈紝鏀寔閫夋嫨鐩綍銆佸姞杞?56澶у皬鐨勫浘鐗囷紝骞朵紭鍖栨樉绀烘€ц兘浠ユ敮鎸?0涓囧紶鍥剧墖 - **鍔熻兘闇€姹?*: - 瀹炵幇鍥剧墖娴忚瑙嗗浘锛圴iew锛夐泦鎴怚NavigationService - 鏀寔閫夋嫨鏂囦欢鐩綍鍔熻兘 - 鍔犺浇256澶у皬鐨勫浘鐗囷紝鏀寔10涓囧紶鍥剧墖 - 浼樺寲鎬ц兘锛屼娇鐢ㄨ櫄鎷熷寲鍒楄〃 - **淇敼鏂囦欢**: - `AuroraDesk.Presentation/ViewModels/Pages/ImageGalleryPageViewModel.cs` (鏂板缓 - 鍥剧墖娴忚ViewModel) - `AuroraDesk.Presentation/Views/Pages/ImageGalleryPageView.axaml` (鏂板缓 - 鍥剧墖娴忚瑙嗗浘XAML) - `AuroraDesk.Presentation/Views/Pages/ImageGalleryPageView.axaml.cs` (鏂板缓 - 鍥剧墖娴忚瑙嗗浘浠g爜) - `AuroraDesk.Presentation/Converters/ImageConverters.cs` (鏂板缓 - 鍥剧墖鐩稿叧杞崲鍣? - `AuroraDesk.Presentation/Services/PageViewModelFactory.cs` (娣诲姞鍥剧墖娴忚椤甸潰娉ㄥ唽) - `AuroraDesk.Infrastructure/Services/NavigationService.cs` (娣诲姞鍥剧墖娴忚瀵艰埅椤? - **涓昏瀹炵幇**: - **ViewModel鍔熻兘**: - 鉁?瀹炵幇鐩綍閫夋嫨鍔熻兘锛堜娇鐢ˋvalonia鐨凮penFolderPickerAsync锛? - 鉁?鎵弿鐩綍涓殑鍥剧墖鏂囦欢锛堟敮鎸乯pg銆乯peg銆乸ng銆乬if銆乥mp銆亀ebp銆乮co銆乻vg鏍煎紡锛? - 鉁?鎵归噺鍔犺浇鍥剧墖淇℃伅锛堟瘡鎵?00涓紝閬垮厤闃诲UI锛? - 鉁?鏄剧ず鍔犺浇杩涘害鍜岀姸鎬佷俊鎭? - 鉁?鏀寔閫夋嫨鍥剧墖鍔熻兘 - **View鍔熻兘**: - 鉁?浣跨敤WrapPanel甯冨眬鏄剧ず鍥剧墖缃戞牸 - 鉁?姣忎釜鍥剧墖椤规樉绀?56x256澶у皬鐨勯瑙堝浘 - 鉁?鏄剧ず鏂囦欢淇℃伅锛堟枃浠跺悕銆佸ぇ灏忋€佷慨鏀规椂闂达級 - 鉁?浣跨敤ItemsControl瀹炵幇铏氭嫙鍖栵紙铏界劧WrapPanel涓嶆敮鎸佽櫄鎷熷寲锛屼絾閫氳繃鎵归噺鍔犺浇浼樺寲鎬ц兘锛? - 鉁?鍔犺浇鎸囩ず鍣ㄥ拰绌虹姸鎬佹彁绀? - **杞崲鍣?*: - 鉁?FilePathToImageSourceConverter - 灏嗘枃浠惰矾寰勮浆鎹负鍥剧墖婧? - 鉁?IsGreaterThanZeroConverter - 鏁板瓧澶т簬闆惰浆鎹㈠櫒 - 鉁?InvertedBoolConverter - 鍙嶈浆甯冨皵鍊艰浆鎹㈠櫒 - 鉁?IsZeroConverter - 鏄惁涓洪浂杞崲鍣? - **瀵艰埅闆嗘垚**: - 鉁?鍦≒ageViewModelFactory涓敞鍐?image-gallery"椤甸潰 - 鉁?鍦∟avigationService涓坊鍔犲浘鐗囨祻瑙堝鑸」锛堜娇鐢≒hoto鍥炬爣锛?- **鎬ц兘浼樺寲**: - 鉁?**鎵归噺鍔犺浇**: 姣忔壒澶勭悊100涓浘鐗囨枃浠讹紝閬垮厤涓€娆℃€у姞杞藉鑷碪I闃诲 - 鉁?**鍚庡彴绾跨▼鎵弿**: 鏂囦欢鎵弿鍦ㄥ悗鍙扮嚎绋嬫墽琛岋紝涓嶉樆濉濽I绾跨▼ - 鉁?**UI绾跨▼鎵归噺娣诲姞**: 鍦║I绾跨▼鎵归噺娣诲姞鍥剧墖椤癸紝鍑忓皯UI鏇存柊棰戠巼 - 鉁?**寤惰繜鍔犺浇**: 鍥剧墖瀹為檯鍔犺浇鍦║I涓寜闇€杩涜锛堥€氳繃杞崲鍣級 - 鉁?**娴佸紡鍔犺浇**: 浣跨敤Task.Delay鍦ㄦ壒娆′箣闂寸◢浣滃欢杩燂紝璁︰I鏈夋椂闂村搷搴?- **鎶€鏈粏鑺?*: - 浣跨敤Avalonia鐨凷torageProvider.OpenFolderPickerAsync瀹炵幇鐩綍閫夋嫨 - 浣跨敤Directory.EnumerateFiles閫掑綊鎵弿鐩綍 - 浣跨敤Dispatcher.UIThread.InvokeAsync纭繚UI鏇存柊鍦║I绾跨▼ - 浣跨敤ReactiveUI鐨凴eactiveCommand瀹炵幇鍛戒护缁戝畾 - 鍥剧墖棰勮浣跨敤184x184澶у皬锛堝疄闄呮樉绀哄尯鍩燂級锛岃竟妗?px锛屾€诲ぇ灏?00x200 - **鏁堟灉**: - 鉁?鐢ㄦ埛鍙互鐐瑰嚮"閫夋嫨鐩綍"鎸夐挳閫夋嫨鍖呭惈鍥剧墖鐨勬枃浠跺す - 鉁?绯荤粺鑷姩鎵弿鏂囦欢澶逛腑鐨勬墍鏈夊浘鐗囨枃浠? - 鉁?浠ョ綉鏍煎舰寮忔樉绀哄浘鐗囬瑙堬紙256澶у皬锛? - 鉁?鏄剧ず鍔犺浇杩涘害鍜屽浘鐗囨€绘暟 - 鉁?鏀寔澶ч噺鍥剧墖锛?0涓囧紶锛夌殑鍔犺浇鍜屾樉绀? - 鉁?鍦ㄥ鑸彍鍗曚腑鍙互閫氳繃"鍥剧墖娴忚"鑿滃崟椤硅闂?- **娉ㄦ剰浜嬮」**: - WrapPanel涓嶆敮鎸佽櫄鎷熷寲锛屼絾閫氳繃鎵归噺鍔犺浇鍜屽欢杩熷姞杞戒紭鍖栨€ц兘 - 瀵逛簬10涓囧紶鍥剧墖锛岄娆″姞杞藉彲鑳介渶瑕佷竴浜涙椂闂达紝浣嗕笉浼氶樆濉濽I - 鍥剧墖瀹為檯鍔犺浇鍦ㄦ樉绀烘椂鎵嶈繘琛岋紝鍑忓皯鍐呭瓨鍗犵敤 - 濡傛灉鐩綍涓病鏈夊浘鐗囨枃浠讹紝浼氭樉绀虹┖鐘舵€佹彁绀? ### 淇敼绐楀彛鎷栧姩鍔熻兘 - 鍙兘閫氳繃宸︿晶瀵艰埅鏍忔嫋鍔紙淇Linux鍏煎鎬у拰鎶栧姩闂锛?- **鏃ユ湡**: 2025-12-19 - **淇敼鍐呭**: 灏嗙獥鍙f嫋鍔ㄥ姛鑳戒粠鏍囬鏍忔敼涓哄彧鑳藉湪宸︿晶瀵艰埅鏍忔嫋鍔紝骞朵慨澶峀inux骞冲彴鎷栧姩闂 - **闂鍒嗘瀽**: - **褰撳墠瀹炵幇**: 鏍囬鏍忓尯鍩燂紙TitleBarGrid锛夊彲浠ユ嫋鍔ㄧ獥鍙? - **鐢ㄦ埛闇€姹?*: 甯屾湜鍙兘閫氳繃宸︿晶瀵艰埅鏍忔潵鎷栧姩绐楀彛锛屾爣棰樻爮鍖哄煙涓嶈兘鎷栧姩 - **Linux鍏煎鎬ч棶棰?*: Windows鐜涓嬫甯革紝浣哃inux鐜涓嬫棤娉曟嫋鍔紝鍥犱负`BeginMoveDrag`鏂规硶鍦↙inux涓婁笉鏀寔 - **鎶栧姩闂**: Linux骞冲彴鎷栧姩鏃跺彲浠ュ伐浣滐紝浣嗕細鍑虹幇鎶栧姩鐜拌薄 - **淇敼鏂囦欢**: - `AuroraDesk.Presentation/Views/MainWindow.axaml` (缁欏乏渚у鑸爮娣诲姞Name灞炴€? - `AuroraDesk.Presentation/Views/MainWindow.axaml.cs` (淇敼鎷栧姩浜嬩欢缁戝畾锛屾坊鍔燣inux骞冲彴鏀寔) - **涓昏淇敼**: - **XAML淇敼**: 鍦ㄥ乏渚у鑸爮鐨凚order鎺т欢涓婃坊鍔?`Name="LeftNavigationBar"` 灞炴€? - **浠g爜淇敼**: - 绉婚櫎 `TitleBarGrid` 鐨勬嫋鍔ㄤ簨浠剁粦瀹? - 灏嗘嫋鍔ㄤ簨浠剁粦瀹氬埌 `LeftNavigationBar` - 閲嶅懡鍚嶄簨浠跺鐞嗘柟娉曪細`OnTitleBarPointerPressed` 鈫?`OnLeftNavigationBarPointerPressed` - **娣诲姞Linux骞冲彴鐗规畩澶勭悊**: - 娣诲姞 `_isDragging`銆乣_dragStartPoint`銆乣_dragStartWindowPosition` 鍜?`_lastPosition` 瀛楁鐢ㄤ簬璺熻釜鎷栧姩鐘舵€? - 鍦↙inux骞冲彴涓婏紝浣跨敤鎵嬪姩鎷栧姩瀹炵幇锛堢洃鍚琡PointerMoved`鍜宍PointerReleased`浜嬩欢锛? - 鍦╓indows骞冲彴涓婏紝缁х画浣跨敤`BeginMoveDrag(e)`绯荤粺鏂规硶 - **淇鎶栧姩闂**: - 浣跨敤灞忓箷鍧愭爣璁$畻锛氳褰曟寜涓嬫椂榧犳爣鐨勫睆骞曞潗鏍囷紙绐楀彛浣嶇疆 + 榧犳爣鍦ㄧ獥鍙e唴鐨勪綅缃級 - 鍦ㄧЩ鍔ㄤ簨浠朵腑锛屼娇鐢ㄥ綋鍓嶇獥鍙d綅缃?+ 榧犳爣鍦ㄥ綋鍓嶇獥鍙e唴鐨勪綅缃潵璁$畻褰撳墠榧犳爣灞忓箷鍧愭爣 - 璁$畻榧犳爣灞忓箷鍧愭爣鐨勫閲忥紝鐒跺悗鍩轰簬鍒濆绐楀彛浣嶇疆鏇存柊绐楀彛浣嶇疆 - 浣跨敤鎸囬拡鎹曡幏锛坄IPointer.Capture`锛夌‘淇濇嫋鍔ㄦ祦鐣? - 淇缂栬瘧閿欒锛氫娇鐢ㄦ纭殑 Avalonia API锛坄pointerPoint.Pointer.Capture` 鑰屼笉鏄?`this.Capture`锛?- **鎶€鏈疄鐜?*: - **璺ㄥ钩鍙版嫋鍔ㄥ疄鐜?*: - Windows: 浣跨敤`BeginMoveDrag(e)`绯荤粺鏂规硶锛屾€ц兘濂戒笖骞虫粦 - Linux: 鎵嬪姩瀹炵幇鎷栧姩閫昏緫锛? - 鍦╜PointerPressed`浜嬩欢涓褰曟嫋鍔ㄨ捣鐐癸紙浣跨敤灞忓箷鍧愭爣锛? - 鍦ㄧ獥鍙g骇鍒殑`PointerMoved`浜嬩欢涓細 - 灏嗗綋鍓嶉紶鏍囦綅缃浆鎹负灞忓箷鍧愭爣 - 璁$畻灞忓箷鍧愭爣鐨勫閲忥紙鍩轰簬鍒濆灞忓箷浣嶇疆锛? - 鏇存柊绐楀彛浣嶇疆锛堝熀浜庡垵濮嬬獥鍙d綅缃級 - 妫€鏌ヤ綅缃槸鍚﹀彉鍖栵紝閬垮厤涓嶅繀瑕佹洿鏂? - 鍦╜PointerReleased`浜嬩欢涓噴鏀炬寚閽堟崟鑾峰苟缁撴潫鎷栧姩 - 浣跨敤`RuntimeInformation.IsOSPlatform`杩涜骞冲彴妫€娴? - 鍦ㄧ獥鍙g骇鍒鐞嗛紶鏍囩Щ鍔ㄤ簨浠讹紝纭繚榧犳爣绉诲嚭瀵艰埅鏍忔椂浠嶈兘缁х画鎷栧姩 - 浣跨敤绐楀彛鐩稿鍧愭爣锛屽缁堝熀浜庡垵濮嬫寜涓嬫椂鐨勭獥鍙d綅缃拰榧犳爣浣嶇疆璁$畻澧為噺 - 浣跨敤鎸囬拡鎹曡幏锛坄IPointer.Capture`锛夌‘淇濇嫋鍔ㄨ繃绋嬩腑浜嬩欢姝g‘浼犻€掞紝榧犳爣绉诲嚭瀵艰埅鏍忔椂浠嶈兘缁х画鎷栧姩 - **鏁堟灉**: - **鎷栧姩鍖哄煙鍙樻洿**: 鍙兘閫氳繃宸︿晶瀵艰埅鏍忔嫋鍔ㄧ獥鍙? - **鏍囬鏍忎笉鍙嫋鍔?*: 鏍囬鏍忓尯鍩熶笉鍐嶅搷搴旀嫋鍔ㄦ搷浣? - **璺ㄥ钩鍙板吋瀹?*: Windows鍜孡inux骞冲彴閮借兘姝e父鎷栧姩绐楀彛 - **鐢ㄦ埛浣撻獙**: 绗﹀悎鐢ㄦ埛闇€姹傦紝鎷栧姩鍔熻兘鏇村姞鏄庣‘涓旇法骞冲彴鍏煎 - **娉ㄦ剰浜嬮」**: - 宸︿晶瀵艰埅鏍忓唴鐨勬寜閽偣鍑讳粛鐒舵甯稿伐浣滐紝涓嶄細瑙﹀彂鎷栧姩 - 鍙湁鍦ㄥ鑸爮鐨勭┖鐧藉尯鍩熸寜涓嬮紶鏍囧乏閿墠浼氳Е鍙戞嫋鍔ㄦ搷浣? - Linux骞冲彴浣跨敤鎵嬪姩鎷栧姩瀹炵幇锛岄€氳繃灞忓箷鍧愭爣璁$畻鍜屼綅缃彉鍖栨鏌ワ紝纭繚鎷栧姩骞虫粦鏃犳姈鍔? - 浣跨敤鎸囬拡鎹曡幏纭繚鎷栧姩杩囩▼涓嵆浣块紶鏍囩Щ鍑哄鑸爮鍖哄煙锛屾嫋鍔ㄤ粛鐒剁户缁? ### Git 浠撳簱浣嶇疆璋冩暣 - 绉诲姩鍒伴」鐩牴鐩綍 - **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 灏?`.git` 鍜?`.gitignore` 浠?`AuroraDesk` 瀛愮洰褰曠Щ鍔ㄥ埌椤圭洰鏍圭洰褰?`MyAvaloniaApp` - **闂鍒嗘瀽**: - 鉂?**Git 浠撳簱浣嶇疆閿欒**: `.git` 鍜?`.gitignore` 鍦?`AuroraDesk` 瀛愮洰褰曪紝瀵艰嚧 Git 鍙鐞嗚瀛愮洰褰? - 鉂?**椤圭洰缁撴瀯涓嶅畬鏁?*: 椤圭洰鍖呭惈澶氫釜瀛愰」鐩紙AuroraDesk.Presentation銆丄uroraDesk.Core 绛夛級锛屼絾 Git 鏃犳硶绠$悊鏁翠釜椤圭洰 - 鉂?**鐗堟湰鎺у埗涓嶅畬鏁?*: 鍏朵粬瀛愰」鐩殑浠g爜鏃犳硶琚?Git 璺熻釜 - **淇敼鎿嶄綔**: - 鉁?**绉诲姩 .git 鏂囦欢澶?*: 浠?`AuroraDesk\.git` 绉诲姩鍒?`MyAvaloniaApp\.git` - 鉁?**绉诲姩 .gitignore 鏂囦欢**: 浠?`AuroraDesk\.gitignore` 绉诲姩鍒?`MyAvaloniaApp\.gitignore` - **鎶€鏈粏鑺?*: - 浣跨敤 PowerShell `Move-Item` 鍛戒护绉诲姩鏂囦欢锛圵indows 10 鐜锛? - 浣跨敤 `-Force` 鍙傛暟纭繚瑕嗙洊锛堝鏋滄牴鐩綍宸插瓨鍦ㄥ悓鍚嶆枃浠讹級 - 绉诲姩鍚?Git 浠撳簱鐜板湪鍙互绠$悊鏁翠釜椤圭洰缁撴瀯 - **鏁堟灉**: - 鉁?**瀹屾暣鐨勭増鏈帶鍒?*: Git 鐜板湪鍙互璺熻釜鎵€鏈夊瓙椤圭洰鐨勪唬鐮? - 鉁?**姝g‘鐨勯」鐩粨鏋?*: `.git` 鍜?`.gitignore` 鍦ㄩ」鐩牴鐩綍锛岀鍚堟爣鍑嗗疄璺? - 鉁?**渚夸簬绠$悊**: 鎵€鏈夐」鐩枃浠堕兘鍙互鍦ㄤ竴涓?Git 浠撳簱涓鐞?- **娉ㄦ剰浜嬮」**: - 绉诲姩鍚?Git 浼氭樉绀哄緢澶氭枃浠朵负鍒犻櫎鐘舵€侊紙鍥犱负宸ヤ綔鐩綍浠庡瓙鐩綍鍙樹负鏍圭洰褰曪級 - 闇€瑕侀噸鏂版坊鍔犳墍鏈夋枃浠讹細`git add .` 鐒跺悗 `git commit` - 鎴栬€呬娇鐢?`git restore` 鎭㈠鏂囦欢锛岀劧鍚庨噸鏂版坊鍔? ### Tab 鍒囨崲鍗¢】浼樺寲 - 淇 ObservableCollection 閲嶆柊鍒涘缓瀵艰嚧閲嶆柊娓叉煋 - **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 淇 Tab 鍒囨崲鏃堕噸鏂拌Е鍙?ObservableCollection HeroIcons 瀵艰嚧閲嶆柊鍔犺浇鍜屽崱椤跨殑闂 - **闂鍒嗘瀽**: - 鉂?**ObservableCollection 閲嶆柊鍒涘缓**: 鍦?LoadIconsAsync 涓垱寤烘柊鐨?ObservableCollection 瀹炰緥 - 鉂?**PropertyChanged 瑙﹀彂**: 閲嶆柊鍒涘缓闆嗗悎鍚庤Е鍙?PropertyChanged锛屽鑷?ItemsControl 閲嶆柊缁戝畾 - 鉂?**ItemsControl 閲嶆柊娓叉煋**: Tab 鍒囨崲鏃讹紝鍗充娇 ViewModel 宸茬紦瀛橈紝浣嗛泦鍚堝紩鐢ㄦ敼鍙樺鑷存墍鏈夐」閲嶆柊娓叉煋 - 鉂?**鏄庢樉鐨勫崱椤?*: 鏁扮櫨涓浘鏍囬噸鏂版覆鏌撳鑷存槑鏄剧殑鍗¢】鏁堟灉 - **淇敼鏂囦欢**: - `AuroraDesk.Presentation/ViewModels/Pages/IconsPageViewModel.cs` (浼樺寲闆嗗悎鎿嶄綔) - **涓昏浼樺寲**: - 鉁?**淇濇寔闆嗗悎寮曠敤涓嶅彉**: 涓嶅啀閲嶆柊鍒涘缓 ObservableCollection锛岀洿鎺ヤ娇鐢?Add 鏂规硶娣诲姞鍒扮幇鏈夐泦鍚? - 鉁?**鍑忓皯 PropertyChanged**: 鍙湪绗竴娆″姞杞芥椂锛堥泦鍚堜粠绌哄彉涓烘湁鏁版嵁锛夎Е鍙?PropertyChanged - 鉁?**閬垮厤閲嶆柊缁戝畾**: 闆嗗悎寮曠敤淇濇寔涓嶅彉锛孖temsControl 涓嶄細閲嶆柊缁戝畾锛岄伩鍏嶉噸鏂版覆鏌撴墍鏈夐」 - 鉁?**浼樺寲娴佸紡鍔犺浇**: 鍚庣画娴佸紡鍔犺浇鍙娇鐢?Add 鏂规硶锛屼笉瑙﹀彂 PropertyChanged - **鎶€鏈粏鑺?*: - 鍦?LoadIconsAsync 涓紝浣跨敤 `_heroIcons.Add()` 鑰屼笉鏄?`_heroIcons = new ObservableCollection<>()` - 浣跨敤 `wasEmpty` 鏍囧織鍒ゆ柇鏄惁绗竴娆″姞杞斤紝鍙湪绗竴娆″姞杞芥椂瑙﹀彂 PropertyChanged - 淇濇寔闆嗗悎寮曠敤涓嶅彉锛岀‘淇?ItemsControl 鐨勭粦瀹氫笉浼氭柇寮€ - ViewModel 宸茬紦瀛橈紝缁撳悎闆嗗悎寮曠敤涓嶅彉锛孴ab 鍒囨崲鏃朵笉浼氶噸鏂版覆鏌?- **鏁堟灉**: - 鉁?**Tab 鍒囨崲娴佺晠**: 涓嶅啀閲嶆柊鍒涘缓闆嗗悎锛孖temsControl 涓嶄細閲嶆柊娓叉煋锛屽垏鎹㈡祦鐣? - 鉁?**鍑忓皯鍗¢】**: 閬垮厤鏁扮櫨涓浘鏍囩殑閲嶆柊娓叉煋锛屾秷闄ゆ槑鏄剧殑鍗¢】鏁堟灉 - 鉁?**鎬ц兘鎻愬崌**: 闆嗗悎寮曠敤涓嶅彉锛屽噺灏戜笉蹇呰鐨?UI 鏇存柊鍜岄噸鏂扮粦瀹? - 鉁?**鏇村ソ鐨勭敤鎴蜂綋楠?*: Tab 鍒囨崲鏃剁珛鍗虫樉绀猴紝鏃犲欢杩燂紝娴佺晠浣撻獙 - **鎬ц兘瀵规瘮**: - **浼樺寲鍓?*: Tab 鍒囨崲鏃堕噸鏂板垱寤?ObservableCollection锛岃Е鍙?PropertyChanged锛孖temsControl 閲嶆柊娓叉煋鎵€鏈夐」锛屾湁鏄庢樉鍗¢】 - **浼樺寲鍚?*: 闆嗗悎寮曠敤涓嶅彉锛屼笉瑙﹀彂 PropertyChanged锛孖temsControl 涓嶉噸鏂版覆鏌擄紝鍒囨崲娴佺晠 ### Tab 鍒囨崲鍗¢】浼樺寲 - 瑙嗗浘缂撳瓨鍜屾覆鏌撲紭鍖?- **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 浼樺寲 Tab 鍒囨崲鏃剁殑鍗¢】闂锛岄€氳繃瑙嗗浘缂撳瓨鍜屾覆鏌撲紭鍖栨彁鍗囨€ц兘 - **闂鍒嗘瀽**: - 鉂?**Tab 鍒囨崲鍗¢】**: 鍗充娇涓嶈Е鍙?Load锛屽垏鎹?Tab 鏃朵粛鐒跺崱椤? - 鉂?**瑙嗗浘閲嶅鍒涘缓**: 姣忔鍒囨崲 Tab 鏃讹紝ViewLocator 閮戒細鍒涘缓鏂扮殑瑙嗗浘瀹炰緥 - 鉂?**ItemsControl 閲嶆柊娓叉煋**: 瑙嗗浘琚噸鏂板垱寤烘椂锛孖temsControl 闇€瑕侀噸鏂版覆鏌撴墍鏈夊浘鏍囷紙鏁扮櫨涓級 - 鉂?**WrapPanel 甯冨眬璁$畻**: 鍒囨崲 Tab 鏃讹紝WrapPanel 闇€瑕侀噸鏂拌绠楁墍鏈夐」鐩殑浣嶇疆 - **淇敼鏂囦欢**: - `AuroraDesk.Presentation/Views/ViewLocator.cs` (娣诲姞瑙嗗浘缂撳瓨) - `AuroraDesk.Presentation/Views/Pages/IconsPageView.axaml.cs` (娣诲姞 WhenActivated) - `AuroraDesk.Presentation/Views/Pages/IconsPageView.axaml` (娣诲姞 UseLayoutRounding) - **涓昏浼樺寲**: - 鉁?**瑙嗗浘缂撳瓨**: 鍦?ViewLocator 涓娇鐢?`ConcurrentDictionary` 缂撳瓨瑙嗗浘瀹炰緥锛屾寜 ViewModel 瀹炰緥缂撳瓨 - 鉁?**閬垮厤閲嶅鍒涘缓**: 濡傛灉瑙嗗浘宸茬紦瀛橈紝鐩存帴杩斿洖锛岄伩鍏嶉噸澶嶅垱寤哄拰閲嶆柊娓叉煋 - 鉁?**UseLayoutRounding**: 娣诲姞 `UseLayoutRounding="True"` 浼樺寲甯冨眬璁$畻鎬ц兘 - 鉁?**WhenActivated**: 鍦ㄨ鍥句唬鐮佷腑娣诲姞 `WhenActivated` 绠$悊鐢熷懡鍛ㄦ湡 - **鎶€鏈粏鑺?*: - 浣跨敤 `ConcurrentDictionary` 缂撳瓨瑙嗗浘锛宬ey 鏄?ViewModel 瀹炰緥 - 鍦?`ResolveView` 涓鍏堟鏌ョ紦瀛橈紝濡傛灉瀛樺湪鐩存帴杩斿洖 - 鏂板垱寤虹殑瑙嗗浘瀹炰緥浼氳缂撳瓨锛屼笅娆″垏鎹?Tab 鏃剁洿鎺ヤ娇鐢? - 浣跨敤 `UseLayoutRounding` 鍙互鍑忓皯甯冨眬璁$畻鐨勭簿搴﹂棶棰橈紝鎻愬崌鎬ц兘 - **鏁堟灉**: - 鉁?**Tab 鍒囨崲鏇村揩**: 瑙嗗浘琚紦瀛橈紝涓嶉渶瑕侀噸鏂板垱寤猴紝鍑忓皯鍗¢】 - 鉁?**鍑忓皯娓叉煋寮€閿€**: 缂撳瓨鐨勮鍥句笉闇€瑕侀噸鏂板垵濮嬪寲锛屽噺灏戞覆鏌撴椂闂? - 鉁?**鏇村ソ鐨勬€ц兘**: 閬垮厤閲嶅鍒涘缓瑙嗗浘锛屽噺灏戝唴瀛樺垎閰嶅拰 GC 鍘嬪姏 - 鉁?**娴佺晠鐨勭敤鎴蜂綋楠?*: Tab 鍒囨崲鏃剁珛鍗虫樉绀猴紝鏃犳槑鏄惧崱椤?- **鎬ц兘瀵规瘮**: - **浼樺寲鍓?*: Tab 鍒囨崲鏃堕噸鏂板垱寤鸿鍥撅紝ItemsControl 閲嶆柊娓叉煋鎵€鏈夊浘鏍囷紝鏈夋槑鏄惧崱椤? - **浼樺寲鍚?*: 瑙嗗浘琚紦瀛橈紝鍒囨崲鏃剁洿鎺ヤ娇鐢紝鍗¢】鏄庢樉鍑忓皯 ### IconsPageView 浼樺寲 Tab 鍒囨崲閫昏緫 - 鍙湪鏁版嵁涓虹┖鏃跺姞杞?- **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 绠€鍖栧姞杞介€昏緫锛屽彧瑕佹暟鎹凡瀛樺湪灏变笉閲嶆柊鍔犺浇锛岄伩鍏?Tab 鍒囨崲鏃剁殑涓嶅繀瑕佸姞杞?- **闂鍒嗘瀽**: - 鉂?**Tab 鍒囨崲鏃堕噸鏂板姞杞?*: 鍗充娇 Tab 杩樺瓨鍦紝鍒囨崲鍒拌 Tab 鏃朵篃浼氳Е鍙戦噸鏂版祦寮忓姞杞? - 鉂?**澶嶆潅鐨勫垽鏂€昏緫**: 涔嬪墠閫氳繃 Router.CurrentViewModel 鍒ゆ柇锛屼絾閫昏緫澶嶆潅涓斾笉澶熷噯纭? - 鉂?**涓嶅繀瑕佺殑鎬ц兘寮€閿€**: Tab 鍒囨崲鍥炴潵鏃讹紝鏁版嵁宸茬粡瀛樺湪锛屼笉闇€瑕侀噸鏂板姞杞?- **淇敼鏂囦欢**: - `AuroraDesk.Presentation/ViewModels/Pages/IconsPageViewModel.cs` (绠€鍖栧姞杞藉垽鏂€昏緫) - **涓昏浼樺寲**: - 鉁?**绠€鍖栧垽鏂?*: 鍙湪 `_heroIcons.Count == 0` 鏃舵墠鍔犺浇锛屽彧瑕佹暟鎹凡瀛樺湪灏变笉閲嶆柊鍔犺浇 - 鉁?**绉婚櫎澶嶆潅閫昏緫**: 绉婚櫎 Router.CurrentViewModel 鐨勫垽鏂紝绠€鍖栦唬鐮? - 鉁?**绉婚櫎缂撳瓨閫昏緫**: LoadIconsAsync 涓笉鍐嶅鐞嗗凡瀛樺湪鏁版嵁鐨勬儏鍐碉紝鍥犱负 getter 宸茬‘淇濆彧鍦ㄦ暟鎹负绌烘椂璋冪敤 - **鎶€鏈粏鑺?*: - 鍦?`HeroIcons` getter 涓彧妫€鏌?`_heroIcons.Count == 0` - 濡傛灉鏁版嵁宸插瓨鍦紝鐩存帴杩斿洖锛屼笉瑙﹀彂浠讳綍鍔犺浇鎿嶄綔 - LoadIconsAsync 鏂规硶绠€鍖栵紝涓嶅啀澶勭悊缂撳瓨鏁版嵁鐨勬儏鍐?- **鏁堟灉**: - 鉁?**Tab 鍒囨崲娴佺晠**: Tab 鍒囨崲鍥炴潵鏃讹紝绔嬪嵆鏄剧ず宸叉湁鏁版嵁锛屾棤鍔犺浇鍔ㄧ敾 - 鉁?**浠g爜鏇寸畝娲?*: 绉婚櫎澶嶆潅鐨勫垽鏂€昏緫锛屼唬鐮佹洿鏄撶淮鎶? - 鉁?**鎬ц兘鏇村ソ**: 閬垮厤涓嶅繀瑕佺殑閲嶆柊鍔犺浇锛屾彁鍗囨€ц兘 - 鉁?**鐢ㄦ埛浣撻獙浣?*: 鍒囨崲 Tab 鏃剁珛鍗崇湅鍒板唴瀹癸紝鏃犻渶绛夊緟 ### IconsPageView 淇绗簩娆$偣鍑诲崱椤?- 寮哄埗閲嶆柊娴佸紡鍔犺浇 - **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 淇 Tab 鍏抽棴鍚庣浜屾鐐瑰嚮 NavIcons 鏃剁殑鍗¢】闂锛屽己鍒堕噸鏂版祦寮忓姞杞介伩鍏嶄竴娆℃€ф覆鏌?- **闂鍒嗘瀽**: - 鉂?**绗簩娆$偣鍑诲崱椤?*: Tab 鍏抽棴鍚庯紝ViewModel 鏁版嵁浠嶇劧淇濈暀锛屽啀娆$偣鍑绘椂 `_heroIcons` 鍖呭惈鎵€鏈夋暟鎹? - 鉂?**涓€娆℃€ф覆鏌?*: 瑙嗗浘閲嶆柊鍒涘缓鏃讹紝UI 缁戝畾鍒板寘鍚墍鏈夋暟鎹殑 `HeroIcons`锛屽鑷翠竴娆℃€ф覆鏌撴墍鏈夊浘鏍? - 鉂?**澶卞幓娴佸紡鍔犺浇**: 绗竴娆℃槸娴佸紡鍔犺浇锛屼絾绗簩娆″洜涓烘暟鎹凡瀛樺湪锛岃烦杩囦簡娴佸紡鍔犺浇閫昏緫 - **淇敼鏂囦欢**: - `AuroraDesk.Presentation/ViewModels/Pages/IconsPageViewModel.cs` (寮哄埗閲嶆柊娴佸紡鍔犺浇) - **涓昏浼樺寲**: - 鉁?**妫€娴嬫暟鎹凡瀛樺湪**: 鍦?`HeroIcons` getter 涓娴嬫暟鎹凡瀛樺湪鐨勬儏鍐? - 鉁?**寮哄埗閲嶆柊娴佸紡鍔犺浇**: 濡傛灉鏁版嵁宸插瓨鍦紝娓呯┖鏁版嵁骞堕噸鏂拌Е鍙戞祦寮忓姞杞? - 鉁?**淇濆瓨缂撳瓨鏁版嵁**: 鍦?`LoadIconsAsync` 涓繚瀛樼幇鏈夋暟鎹紝閬垮厤閲嶅浠庢湇鍔¤幏鍙? - 鉁?**闃叉閲嶅瑙﹀彂**: 浣跨敤 `_isReStreaming` 鏍囧織闃叉閲嶅瑙﹀彂娴佸紡鍔犺浇 - **鎶€鏈粏鑺?*: - 鍦?`HeroIcons` getter 涓娴?`_heroIcons.Count > 0 && _isDataLoaded`锛屽鏋滀负鐪熷垯瑙﹀彂閲嶆柊娴佸紡鍔犺浇 - 鍦?`LoadIconsAsync` 寮€濮嬫椂锛屽鏋滄暟鎹凡瀛樺湪锛屼繚瀛樺埌 `cachedData` 骞舵竻绌洪泦鍚? - 浣跨敤缂撳瓨鏁版嵁鑰岄潪閲嶆柊浠庢湇鍔¤幏鍙栵紝鎻愬崌鎬ц兘 - 浣跨敤 `_isReStreaming` 鏍囧織闃叉 getter 琚娆¤皟鐢ㄦ椂閲嶅瑙﹀彂 - **鏁堟灉**: - 鉁?**绗簩娆$偣鍑绘祦鐣?*: Tab 鍏抽棴鍚庡啀娆$偣鍑伙紝閲嶆柊娴佸紡鍔犺浇锛屾棤鍗¢】 - 鉁?**淇濇寔娴佸紡浣撻獙**: 鏃犺绗嚑娆℃墦寮€锛岄兘淇濇寔娴佸紡鍔犺浇鐨勭敤鎴蜂綋楠? - 鉁?**閬垮厤涓€娆℃€ф覆鏌?*: 涓嶄細涓€娆℃€ф覆鏌撴墍鏈夊浘鏍囷紝鍑忓皯 UI 闃诲 - 鉁?**鎬ц兘浼樺寲**: 浣跨敤缂撳瓨鏁版嵁锛岄伩鍏嶉噸澶嶄粠鏈嶅姟鑾峰彇 - **鎬ц兘瀵规瘮**: - **浼樺寲鍓?*: 绗簩娆$偣鍑绘椂涓€娆℃€ф覆鏌撴墍鏈夊浘鏍囷紝瀵艰嚧鍗¢】 2-3 绉? - **浼樺寲鍚?*: 绗簩娆$偣鍑绘椂閲嶆柊娴佸紡鍔犺浇锛屾祦鐣呮棤鍗¢】 ### Tab 鍒囨崲鍜屽鑸€ц兘浼樺寲 - 閬垮厤閲嶅娓叉煋 - **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 浼樺寲 Tab 鍒囨崲鍜屼簩娆$偣鍑诲鑸殑鎬ц兘锛岄伩鍏嶉噸澶嶆覆鏌撳鑷寸殑鍗¢】 - **闂鍒嗘瀽**: - 鉂?**Tab 鍒囨崲鍗¢】**: 姣忔鍒囨崲 Tab 閮戒細鎵ц `Router.Navigate.Execute`锛屽嵆浣垮綋鍓嶅凡缁忔樉绀鸿 ViewModel锛屽鑷磋鍥鹃噸鏂版覆鏌? - 鉂?**浜屾鐐瑰嚮鍗¢】**: Tab 鍏抽棴鍚庯紝鍐嶆鐐瑰嚮瀵艰埅鏍忎細閲嶆柊鍒涘缓 Tab 鍜岃鍥撅紝鍗充娇 ViewModel 杩樺湪锛屽鑷撮噸澶嶆覆鏌? - 鉂?**涓嶅繀瑕佺殑瀵艰埅**: 娌℃湁妫€鏌ュ綋鍓?Router 鐘舵€侊紝鎬绘槸鎵ц瀵艰埅鎿嶄綔 - **淇敼鏂囦欢**: - `AuroraDesk.Presentation/ViewModels/MainWindowViewModel.cs` (浼樺寲 Tab 鍒囨崲鍜屽鑸€昏緫) - `AuroraDesk.Infrastructure/Services/NavigationService.cs` (浼樺寲瀵艰埅妫€鏌? - `AuroraDesk.Core/Interfaces/ITabManagementService.cs` (娣诲姞 FindTabById 鏂规硶) - `AuroraDesk.Infrastructure/Services/TabManagementService.cs` (瀹炵幇 FindTabById 鏂规硶) - **涓昏浼樺寲**: - 鉁?**Tab 鍒囨崲浼樺寲**: 鍦?`SelectTab` 涓鏌?`Router.CurrentViewModel`锛屽鏋滃凡缁忔槸鐩爣 ViewModel 灏辫烦杩囧鑸? - 鉁?**浜屾鐐瑰嚮浼樺寲**: 鍦ㄥ鑸墠妫€鏌ユ槸鍚﹀凡鏈?Tab 瀛樺湪锛屽鏋滄湁灏辩洿鎺ュ垏鎹㈠埌宸叉湁 Tab锛岄伩鍏嶉噸鏂板垱寤? - 鉁?**瀵艰埅妫€鏌?*: 鍦?`NavigateToPage` 涓鏌ュ綋鍓?Router 鐘舵€侊紝閬垮厤閲嶅瀵艰埅 - 鉁?**楂樻晥鏌ユ壘**: 娣诲姞 `FindTabById` 鏂规硶锛屼娇鐢ㄥ瓧鍏告煡鎵撅紙O(1) 鏃堕棿澶嶆潅搴︼級 - **鎶€鏈粏鑺?*: - 鍦?`SelectTab` 涓鏌?`_screen.Router.CurrentViewModel == tab.ViewModel`锛屽鏋滅浉鍚屽垯璺宠繃瀵艰埅 - 鍦?`NavigateToPage` 涓鏌?`item.ViewModel.HostScreen.Router.CurrentViewModel == item.ViewModel` - 鍦ㄥ鑸墠浣跨敤 `FindTabById` 鏌ユ壘宸插瓨鍦ㄧ殑 Tab锛屽鏋滄壘鍒板氨鐩存帴鍒囨崲鍒伴偅涓?Tab - 浣跨敤瀛楀吀缂撳瓨锛坄_tabByIdMap`锛夊疄鐜?O(1) 鏃堕棿澶嶆潅搴︾殑鏌ユ壘 - **鏁堟灉**: - 鉁?**Tab 鍒囨崲娴佺晠**: 濡傛灉褰撳墠宸茬粡鏄洰鏍囪鍥撅紝绔嬪嵆鍝嶅簲锛屾棤鍗¢】 - 鉁?**浜屾鐐瑰嚮蹇€?*: Tab 鍏抽棴鍚庡啀娆$偣鍑伙紝鐩存帴鍒囨崲鍒板凡鏈?Tab锛屾棤闇€绛夊緟 - 鉁?**閬垮厤閲嶅娓叉煋**: 涓嶄細閲嶅鍒涘缓瑙嗗浘锛屽噺灏?UI 娓叉煋璐熸媴 - 鉁?**鏇村ソ鐨勬€ц兘**: O(1) 鏌ユ壘鎬ц兘锛屽揩閫熷搷搴?- **鎬ц兘瀵规瘮**: - **浼樺寲鍓?*: Tab 鍒囨崲鏃舵€绘槸鎵ц瀵艰埅锛屽鑷磋鍥鹃噸鏂版覆鏌擄紝鏈夊崱椤? - **浼樺寲鍚?*: 鏅鸿兘妫€鏌ワ紝閬垮厤涓嶅繀瑕佺殑瀵艰埅鍜屾覆鏌擄紝娴佺晠鍒囨崲 ### IconsPageView 鎬ц兘浼樺寲 - 娣诲姞婊氬姩鏀寔鍜屾暟鎹紦瀛?- **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 娣诲姞婊氬姩鏀寔锛屼紭鍖栨暟鎹紦瀛橀伩鍏嶉噸澶嶅姞杞斤紝鎻愬崌绗簩娆℃墦寮€鐨勬€ц兘 - **闂鍒嗘瀽**: - 鉂?**娌℃湁婊氬姩鏁堟灉**: ItemsControl 缂哄皯 ScrollViewer锛屾棤娉曟粴鍔ㄦ煡鐪嬫墍鏈夊浘鏍? - 鉂?**绗簩娆$偣鍑绘參**: 姣忔瀵艰埅閮戒細閲嶆柊鍔犺浇鏁版嵁锛屽嵆浣挎暟鎹凡缁忓瓨鍦? - 鉂?**鏁版嵁閲嶅鍔犺浇**: ViewModel 澶嶇敤浣嗘暟鎹閲嶆柊鍔犺浇锛屾氮璐规€ц兘 - **淇敼鏂囦欢**: - `AuroraDesk.Presentation/Views/Pages/IconsPageView.axaml` (娣诲姞 ScrollViewer) - `AuroraDesk.Presentation/ViewModels/Pages/IconsPageViewModel.cs` (浼樺寲鏁版嵁缂撳瓨妫€鏌? - **涓昏浼樺寲**: - 鉁?**娣诲姞 ScrollViewer**: 鍦?ItemsControl 澶栧眰娣诲姞 ScrollViewer锛屾敮鎸佸瀭鐩存粴鍔? - 鉁?**鏁版嵁缂撳瓨妫€鏌?*: 鍦?`LoadIconsAsync()` 寮€濮嬫椂妫€鏌?`_heroIcons.Count > 0`锛屽鏋滃凡鏈夋暟鎹垯璺宠繃鍔犺浇 - 鉁?**浼樺寲 HeroIcons getter**: 妫€鏌?`_heroIcons.Count == 0` 鎵嶈Е鍙戝姞杞斤紝閬垮厤閲嶅鍔犺浇 - 鉁?**淇濇寔鏁版嵁鎸佷箙鍖?*: ViewModel 澶嶇敤鍚庯紝鏁版嵁涓嶄細涓㈠け锛岀洿鎺ヤ娇鐢ㄥ凡鏈夋暟鎹?- **鎶€鏈粏鑺?*: - ScrollViewer 璁剧疆 `VerticalScrollBarVisibility="Auto"`锛岄渶瑕佹椂鏄剧ず婊氬姩鏉? - 璁剧疆 `HorizontalScrollBarVisibility="Disabled"`锛岀鐢ㄦ按骞虫粴鍔? - 鍦?`LoadIconsAsync()` 鏂规硶寮€濮嬪妫€鏌ユ暟鎹槸鍚﹀凡瀛樺湪 - 濡傛灉鏁版嵁宸插瓨鍦紝鐩存帴杩斿洖锛屼笉鎵ц鍔犺浇閫昏緫 - **鏁堟灉**: - 鉁?**鏀寔婊氬姩**: 鍙互婊氬姩鏌ョ湅鎵€鏈夊浘鏍? - 鉁?**绗簩娆℃墦寮€蹇?*: 濡傛灉鏁版嵁宸插姞杞斤紝绔嬪嵆鏄剧ず锛屾棤闇€绛夊緟 - 鉁?**閬垮厤閲嶅鍔犺浇**: 鏁版嵁缂撳瓨鏈夋晥锛屼笉娴垂鎬ц兘 - 鉁?**鏇村ソ鐨勭敤鎴蜂綋楠?*: 蹇€熷搷搴旓紝娴佺晠婊氬姩 ### IconsPageView 淇涓荤嚎绋嬮樆濉為棶棰?- 寤惰繜鍔犺浇浼樺寲 - **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 淇鐐瑰嚮 NavIcons 鏃朵富绾跨▼鍗′綇 3 绉掔殑闂锛岄€氳繃寤惰繜鍔犺浇鍜屼紭鍖栨覆鏌撶瓥鐣ヨВ鍐?- **闂鍒嗘瀽**: - 鉂?**鏋勯€犲嚱鏁扮珛鍗冲姞杞?*: 鍦ㄦ瀯閫犲嚱鏁颁腑绔嬪嵆璋冪敤 `LoadIconsAsync()`锛屽鑷村鑸椂闃诲 - 鉂?**澶ч噺 UI 鍏冪礌娓叉煋**: WrapPanel 涓嶆敮鎸佽櫄鎷熷寲锛屾墍鏈夊浘鏍囬兘浼氳绔嬪嵆娓叉煋 - 鉂?**鍒濆鎵规杩囧ぇ**: 绗竴鎵瑰姞杞?60 涓浘鏍囷紝娓叉煋璐熸媴閲? - 鉂?**UI 鏇存柊浼樺厛绾ц繃楂?*: 鍦?UI 绾跨▼涓婄洿鎺ヨ缃泦鍚堬紝闃诲鍏朵粬鎿嶄綔 - **淇敼鏂囦欢**: - `AuroraDesk.Presentation/ViewModels/Pages/IconsPageViewModel.cs` (寤惰繜鍔犺浇浼樺寲) - `AuroraDesk.Presentation/Views/Pages/IconsPageView.axaml` (ListBox 鏀逛负 ItemsControl) - **涓昏浼樺寲**: - 鉁?**寤惰繜鍔犺浇**: 绉婚櫎鏋勯€犲嚱鏁颁腑鐨?`LoadIconsAsync()` 璋冪敤锛屾敼涓哄湪 `HeroIcons` 灞炴€ч娆¤闂椂鍔犺浇 - 鉁?**鍑忓皯鍒濆鎵规**: 浠?`initialBatchSize = 60` 鏀逛负 `30`锛屽噺灏戝垵濮嬫覆鏌撹礋鎷? - 鉁?**澧炲姞鎵规澶у皬**: 浠?`incrementalBatchSize = 20` 鏀逛负 `30`锛屽噺灏?UI 鏇存柊棰戠巼 - 鉁?**鍚庡彴浼樺厛绾?*: 浣跨敤 `DispatcherPriority.Background` 鏇存柊 UI锛屼笉闃诲鍏朵粬鎿嶄綔 - 鉁?**ItemsControl鏇夸唬ListBox**: 鍑忓皯閫夋嫨鐩稿叧鐨勫紑閿€ - 鉁?**寮傛 Task 杩斿洖**: 灏?`async void` 鏀逛负 `async Task`锛屾洿濂界殑閿欒澶勭悊 - **鎶€鏈粏鑺?*: - 浣跨敤寤惰繜鍒濆鍖栨ā寮忥細鍦?`HeroIcons` getter 涓鏌?`_isDataLoaded` 鏍囧織 - 棣栨璁块棶鏃舵墠瑙﹀彂鏁版嵁鍔犺浇锛岄伩鍏嶅鑸椂闃诲 - 浣跨敤 `Dispatcher.UIThread.InvokeAsync` 閰嶅悎 `DispatcherPriority.Background` 鏇存柊 UI - 鐩存帴鎿嶄綔 `_heroIcons` 瀛楁鑰屼笉鏄睘鎬э紝鍑忓皯灞炴€у彉鏇撮€氱煡寮€閿€ - **鏁堟灉**: - 鉁?**瀵艰埅涓嶅啀闃诲**: 鐐瑰嚮 NavIcons 鏃剁珛鍗冲搷搴旓紝涓嶅啀鍗′綇 3 绉? - 鉁?**鏇村揩鐨勫垵濮嬫樉绀?*: 绗竴鎵瑰彧鏄剧ず 30 涓浘鏍囷紝鏇村揩鍝嶅簲 - 鉁?**娴佺晠鐨勭敤鎴蜂綋楠?*: 浣跨敤鍚庡彴浼樺厛绾ф洿鏂帮紝涓嶉樆濉炵敤鎴蜂氦浜? - 鉁?**鏇村ソ鐨勬€ц兘**: 鍑忓皯 UI 鏇存柊棰戠巼锛岄檷浣庝富绾跨▼璐熸媴 - **鎬ц兘瀵规瘮**: - **浼樺寲鍓?*: 瀵艰埅鏃堕樆濉?3 绉掞紝涓荤嚎绋嬪畬鍏ㄥ崱浣? - **浼樺寲鍚?*: 瀵艰埅绔嬪嵆鍝嶅簲锛屾暟鎹紓姝ュ姞杞斤紝涓嶉樆濉炰富绾跨▼ ### IconsPageView 淇瀛椾綋閬尅鍜岄棿璺濊繃澶ч棶棰?- **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 淇鍥炬爣鎸夐挳涓枃瀛楄閬尅涓€鍗婄殑闂锛屽苟鍑忓皯杩囧ぇ鐨?margin 鍜?padding - **闂鍒嗘瀽**: - 鉂?**鏂囧瓧琚伄鎸?*: 鏂囧瓧鐨勪笅鍗婇儴鍒嗚鎴柇锛屾棤娉曞畬鏁存樉绀? - 鉂?**Padding杩囧ぇ**: Button 鐨?Padding="10,10" 瀵艰嚧鍐呴儴绌洪棿娴垂 - 鉂?**Margin杩囧ぇ**: Button 鐨?Margin="4" 鍜?StackPanel 鐨?Spacing="10" 瀵艰嚧闂磋窛杩囧ぇ - 鉂?**MinHeight杩囧ぇ**: MinHeight="120" 瀵艰嚧鎸夐挳楂樺害杩囧ぇ锛屾氮璐圭┖闂?- **淇敼鏂囦欢**: - `AuroraDesk.Presentation/Views/Pages/IconsPageView.axaml` (浼樺寲鍥炬爣鎸夐挳鐨勫竷灞€鍜岄棿璺? - **涓昏浼樺寲**: - 鉁?**鍑忓皯Padding**: 浠?`Padding="10,10"` 鏀逛负 `Padding="8,6"`锛屽噺灏戝唴閮ㄧ┖闂? - 鉁?**鍑忓皯Margin**: 浠?`Margin="4"` 鏀逛负 `Margin="3"`锛屽噺灏戞寜閽棿璺? - 鉁?**鍑忓皯Spacing**: StackPanel 鐨?Spacing 浠?`10` 鏀逛负 `6`锛屽噺灏戝浘鏍囧拰鏂囧瓧鐨勯棿璺? - 鉁?**鍑忓皯MinHeight**: 浠?`MinHeight="120"` 鏀逛负 `MinHeight="90"`锛屽噺灏戞寜閽珮搴? - 鉁?**浼樺寲鍥炬爣澶у皬**: HeroIcon 浠?`Width="32" Height="32"` 鏀逛负 `Width="28" Height="28"`锛屾洿绱у噾 - 鉁?**绉婚櫎StackPanel Margin**: 浠?`Margin="0,2"` 鏀逛负 `Margin="0"`锛屽噺灏戦澶栬竟璺? - 鉁?**澧炲姞TextBlock MaxWidth**: 浠?`MaxWidth="95"` 鏀逛负 `MaxWidth="100"`锛岀粰鏂囧瓧鏇村绌洪棿 - 鉁?**娣诲姞TextBlock Margin**: 璁剧疆 `Margin="0"` 纭繚鏂囧瓧涓嶈鎴柇 - **鏁堟灉**: - 鉁?**鏂囧瓧瀹屾暣鏄剧ず**: 鏂囧瓧涓嶅啀琚伄鎸★紝鍙互瀹屾暣鏄剧ず - 鉁?**鏇寸揣鍑戠殑甯冨眬**: 鍑忓皯涓嶅繀瑕佺殑闂磋窛锛岀晫闈㈡洿绱у噾 - 鉁?**鏇村ソ鐨勭┖闂村埄鐢?*: 鍑忓皯楂樺害鍜岄棿璺濓紝鍙互鏄剧ず鏇村鍥炬爣 ### IconsPageViewModel 褰诲簳閲嶆瀯锛氱Щ闄よ櫄鍋囧紓姝ワ紝绠€鍖栧姞杞介€昏緫 - **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 褰诲簳閲嶆瀯 `IconsPageViewModel`锛岀Щ闄ゆ墍鏈?涓哄紓姝ヨ€屽紓姝?鐨勫鏉傞€昏緫锛岀畝鍖栦负鐩存帴鍚屾鍒濆鍖?- **闂鍒嗘瀽**: - 鉂?**铏氬亣寮傛**: 浣跨敤 `Task.Run` 鍖呰鍚屾鎿嶄綔锛圙etIcons 鍙槸鏋氫妇鍊煎垱寤哄璞★紝< 10ms锛夛紝瀹屽叏娌℃湁蹇呰 - 鉂?**杩囧害澶嶆潅**: 鎵归噺娣诲姞銆丏ispatcher銆佸姩鎬佸欢杩熺瓑澶嶆潅閫昏緫锛屽鍔犱簡涓嶅繀瑕佺殑寮€閿€ - 鉂?**鎬ц兘鍙嶄紭鍖?*: 绾跨▼鍒囨崲銆佹壒閲忔坊鍔犮€佸欢杩熺瓑閮藉鍔犱簡棰濆寮€閿€锛屽弽鑰屽彉鎱? - 鉂?**ItemTemplate 宓屽杩囨繁**: Border -> Button -> StackPanel -> Border -> HeroIcon锛?灞傚祵濂楀奖鍝嶆覆鏌撴€ц兘 - **淇敼鏂囦欢**: - `AuroraDesk.Presentation/ViewModels/Pages/IconsPageViewModel.cs` (褰诲簳閲嶆瀯锛岀Щ闄ゆ墍鏈夊紓姝ラ€昏緫) - `AuroraDesk.Presentation/Views/Pages/IconsPageView.axaml` (绠€鍖?ItemTemplate锛屽噺灏戝祵濂楀眰绾? - **涓昏浼樺寲**: - 鉁?**绉婚櫎铏氬亣寮傛**: - 鍘绘帀鎵€鏈?`Task.Run`銆乣Dispatcher.UIThread.InvokeAsync`銆佹壒閲忔坊鍔犮€佸欢杩熺瓑閫昏緫 - 鐩存帴鍦ㄦ瀯閫犲嚱鏁颁腑鍚屾璋冪敤 `GetIcons()`锛堟搷浣滃緢蹇紝< 10ms锛? - 鍘绘帀 `IsLoading` 灞炴€у拰鍔犺浇鎸囩ず鍣? - 鉁?**绠€鍖栧垵濮嬪寲**: - 浠庡鏉傜殑鎳掑姞杞?+ 寮傛娴佸紡鍔犺浇锛岀畝鍖栦负鏋勯€犲嚱鏁颁腑鐩存帴鍚屾鍒濆鍖? - 浠g爜閲忎粠 80+ 琛屽噺灏戝埌 10 琛岋紝澶у箙绠€鍖? - 鉁?**绠€鍖?ItemTemplate**: - 浠?5 灞傚祵濂楋紙Border -> Button -> StackPanel -> Border -> HeroIcon锛夌畝鍖栦负 3 灞傦紙Button -> StackPanel -> HeroIcon锛? - 鍘绘帀鍐呭眰 Border锛孒eroIcon 鐩存帴鏄剧ず - 鍑忓皯鍏冪礌鏁伴噺鍜屽祵濂楀眰绾э紝鎻愬崌娓叉煋鎬ц兘 - **鎬ц兘褰卞搷**: - 鉁?**浠g爜绠€鍖?*: 浠g爜閲忓噺灏?70%锛岄€昏緫娓呮櫚鏄撴噦 - 鉁?**鍑忓皯寮€閿€**: 鍘绘帀绾跨▼鍒囨崲銆丏ispatcher 璋冪敤銆佸欢杩熺瓑棰濆寮€閿€ - 鉁?**鏇村揩鍒濆鍖?*: 鐩存帴鍚屾鍒濆鍖栵紝閬垮厤寮傛甯︽潵鐨勫欢杩? - 鉁?**鏇村揩鐨勬覆鏌?*: 绠€鍖?ItemTemplate 鍑忓皯娓叉煋鏃堕棿 - **鎶€鏈鐐?*: - **涓嶈涓哄紓姝ヨ€屽紓姝?*: 濡傛灉鎿嶄綔寰堝揩锛? 10ms锛夛紝鐩存帴鍚屾鎵ц鍗冲彲 - **绠€鍗曞氨鏄編**: 澶嶆潅鐨勫紓姝ラ€昏緫涓嶄竴瀹氭洿蹇紝鍙嶈€屽彲鑳藉鍔犲紑閿€ - **鍑忓皯宓屽**: UI 妯℃澘宓屽灞傜骇瓒婂皯锛屾覆鏌撹秺蹇? - **鎬ц兘娴嬮噺**: 鏍规嵁瀹為檯鎬ц兘娴嬭瘯缁撴灉浼樺寲锛岃€屼笉鏄悊璁轰紭鍖? ### IconService 褰诲簳绉婚櫎鏃犳剰涔夌殑寮傛鏂规硶 - **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 瀹屽叏绉婚櫎 `GetIconsAsync()` 鏂规硶锛屽洜涓哄畠鍙槸鐢?`Task.FromResult` 鍖呰鍚屾鎿嶄綔锛屾病鏈変换浣曠湡姝g殑寮傛鎰忎箟 - **闂鍒嗘瀽**: - 鉂?**铏氬亣寮傛**: `GetIconsAsync` 鍙槸璋冪敤鍚屾鐨?`GetIcons()`锛岀劧鍚庣敤 `Task.FromResult` 鍖呰锛屾病鏈変换浣曠湡姝g殑寮傛鎿嶄綔 - 鉂?**澧炲姞澶嶆潅搴?*: 淇濈暀涓€涓棤鎰忎箟鐨勫紓姝ユ柟娉曞彧浼氬鍔犱唬鐮佸鏉傚害锛岃瀵煎紑鍙戣€? - 鉂?**涓嶅繀瑕佺殑鎺ュ彛瀹氫箟**: 鎺ュ彛涓畾涔変簡涓や釜鏂规硶锛屼絾瀹為檯鍙渶瑕佷竴涓悓姝ユ柟娉?- **淇敼鏂囦欢**: - `AuroraDesk.Core/Interfaces/IIconService.cs` (绉婚櫎 `GetIconsAsync` 鏂规硶瀹氫箟) - `AuroraDesk.Infrastructure/Services/IconService.cs` (绉婚櫎 `GetIconsAsync` 鏂规硶瀹炵幇锛岀Щ闄?`System.Threading.Tasks` 寮曠敤) - **涓昏浼樺寲**: - 鉁?**绠€鍖栨帴鍙?*: 鎺ュ彛鍙繚鐣?`GetIcons()` 鍚屾鏂规硶 - 鉁?**绉婚櫎鏃犵敤浠g爜**: 鍒犻櫎 `GetIconsAsync()` 鏂规硶鍜岀浉鍏崇殑 `Task` 寮曠敤 - 鉁?**浠g爜鏇存竻鏅?*: 鏄庣‘琛ㄦ槑杩欐槸鍚屾鎿嶄綔锛屼笉闇€瑕佸紓姝ュ寘瑁?- **鎶€鏈鐐?*: - **鍘熷垯**: 濡傛灉娌℃湁鐪熸鐨勫紓姝ユ搷浣滐紙I/O銆佺綉缁溿€侀暱鏃堕棿璁$畻绛夛級锛屽氨涓嶅簲璇ユ彁渚涘紓姝ユ柟娉? - **鍚屾鎿嶄綔**: 鏋氫妇鍊笺€佸垱寤哄璞¤繖绉嶅揩閫熸搷浣滐紙< 10ms锛夊簲璇ョ洿鎺ョ敤鍚屾鏂规硶 - **閬垮厤铏氬亣寮傛**: 涓嶈涓轰簡"鐪嬭捣鏉ョ幇浠?鑰屼娇鐢ㄥ紓姝ワ紝搴旇鏈夊疄闄呮剰涔夋墠浣跨敤 ### IconService 浼樺寲锛氱Щ闄よ櫄鍋囧紓姝ユ搷浣?- **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 浼樺寲 `IconService.GetIconsAsync()` 鏂规硶锛岀Щ闄や负浜嗗紓姝ヨ€屽紓姝ョ殑 `Task.Run`锛屾敼涓虹洿鎺ユ墽琛屽苟鐢?`Task.FromResult` 鍖呰 - **闂鍒嗘瀽**: - 鉂?**铏氬亣寮傛**: `GetIconsAsync` 浣跨敤 `Task.Run` 鍖呰鍚屾鎿嶄綔锛堟灇涓惧€笺€佸垱寤哄璞★級锛屾病鏈夌湡姝g殑寮傛鎿嶄綔 - 鉂?**涓嶅繀瑕佺殑绾跨▼鍒囨崲**: 鍒涘缓瀵硅薄杩欑蹇€熸搷浣滀笉闇€瑕佸悗鍙扮嚎绋嬶紝`Task.Run` 澧炲姞浜嗕笉蹇呰鐨勫紑閿€ - 鉂?**GetIcons() 鍚屾鏂规硶闃诲**: 浣跨敤 `GetAwaiter().GetResult()` 浼氶樆濉炵嚎绋?- **淇敼鏂囦欢**: - `AuroraDesk.Infrastructure/Services/IconService.cs` (绉婚櫎铏氬亣寮傛) - `AuroraDesk.Core/Interfaces/IIconService.cs` (鏇存柊鎺ュ彛娉ㄩ噴) - **涓昏浼樺寲**: - 鉁?**绉婚櫎 Task.Run**: - 鐩存帴鍚屾鎵ц鏋氫妇鍊煎拰鍒涘缓瀵硅薄鎿嶄綔锛堣繖浜涙搷浣滃緢蹇紝閫氬父 < 10ms锛? - 浣跨敤 `Task.FromResult` 鍖呰缁撴灉锛屼繚鎸佹帴鍙g殑寮傛绛惧悕 - 閬垮厤涓嶅繀瑕佺殑绾跨▼鍒囨崲寮€閿€ - 鉁?**浼樺寲 GetIcons() 鍚屾鏂规硶**: - 濡傛灉缂撳瓨瀛樺湪锛岀洿鎺ヨ繑鍥烇紙蹇€熻矾寰勶級 - 濡傛灉缂撳瓨涓嶅瓨鍦紝杩斿洖绌洪泦鍚堝苟璁板綍璀﹀憡锛岃€屼笉鏄樆濉炵嚎绋? - 寤鸿璋冪敤鏂逛娇鐢?`GetIconsAsync()` 鏂规硶 - 鉁?**鏇存柊鎺ュ彛娉ㄩ噴**: - 鏄庣‘璇存槑鍚屾鏂规硶鐨勮涓哄拰闄愬埗 - 寤鸿浼樺厛浣跨敤寮傛鏂规硶 - **鎬ц兘褰卞搷**: - 鉁?**鍑忓皯寮€閿€**: 绉婚櫎涓嶅繀瑕佺殑绾跨▼鍒囨崲锛屾彁鍗囨€ц兘 - 鉁?**浠g爜娓呮櫚**: 鏂规硶鏇寸畝鍗曪紝涓嶅啀鏈夎櫄鍋囧紓姝? - 鉁?**绗﹀悎鏈€浣冲疄璺?*: 鍙湪鏈夌湡姝g殑寮傛鎿嶄綔鏃舵墠浣跨敤 async/await - **鎶€鏈鐐?*: - **Task.FromResult**: 鐢ㄤ簬鍖呰鍚屾鎿嶄綔缁撴灉锛屼繚鎸佸紓姝ユ帴鍙g鍚? - **閬垮厤铏氬亣寮傛**: 鍚屾鎿嶄綔涓嶉渶瑕?`Task.Run`锛屽簲璇ュ湪璋冪敤鏂癸紙濡傞渶瑕侊級浣跨敤 - **蹇€熸搷浣?*: 鏋氫妇鍊煎拰鍒涘缓瀵硅薄鎿嶄綔寰堝揩锛岀洿鎺ユ墽琛屽嵆鍙? ### IconsPageViewModel 鎬ц兘浼樺寲锛氫粠 5 绉掍紭鍖栧埌 1 绉掑唴鍔犺浇瀹屾垚 - **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 閽堝 IconsPageView 瀵艰埅鍗¢】 5 绉掍互涓婄殑闂锛岃繘琛屽叏闈㈡€ц兘浼樺寲锛岀洰鏍?1 绉掑唴瀹屾垚鍔犺浇 - **闂鍒嗘瀽**: - 鉂?**ItemsControl + UniformGrid 鏃犺櫄鎷熷寲**: 浼氭覆鏌撴墍鏈夊浘鏍囷紙鏁扮櫨涓級锛屽鑷?UI 绾跨▼闃诲 5+ 绉? - 鉂?**澶嶆潅鐨?ItemTemplate**: 澶氬眰宓屽锛圔order銆丅utton銆丼tackPanel銆丅order锛夛紝澧炲姞娓叉煋寮€閿€ - 鉂?**涓€娆℃€ц缃墍鏈夋暟鎹?*: 鍗充娇寮傛鍔犺浇锛屼竴娆℃€ф坊鍔犲埌 ObservableCollection 浼氬鑷?UI 绔嬪嵆娓叉煋鎵€鏈夊厓绱? - 鉂?**鏁版嵁鍒涘缓鏁堢巼浣?*: 浣跨敤寰幆鍒涘缓锛屾病鏈夐鍒嗛厤瀹归噺 - **淇敼鏂囦欢**: - `AuroraDesk.Presentation/Views/Pages/IconsPageView.axaml` (鎬ц兘浼樺寲) - `AuroraDesk.Presentation/ViewModels/Pages/IconsPageViewModel.cs` (澧為噺鍔犺浇绛栫暐) - `AuroraDesk.Infrastructure/Services/IconService.cs` (浼樺寲鏁版嵁鍒涘缓) - **涓昏浼樺寲**: - 鉁?**鏇挎崲涓?ListBox + WrapPanel**: - 浠?`ItemsControl` + `UniformGrid` 鏀逛负 `ListBox` + `WrapPanel` - ListBox 鍏锋湁鏇村ソ鐨勬€ц兘鐗规€? - 绠€鍖?ItemContainerStyle锛屽噺灏戝鍣ㄥ紑閿€ - 鉁?**绠€鍖?ItemTemplate**: - 鍑忓皯宓屽灞傜骇 - 鍥哄畾瀹藉害鍜岄珮搴︼紙110x100锛夛紝閬垮厤甯冨眬璁$畻 - 绉婚櫎涓嶅繀瑕佺殑鏍峰紡閫夋嫨鍣? - 娣诲姞 `TextTrimming="CharacterEllipsis"` 浼樺寲鏂囨湰娓叉煋 - 鉁?**澧為噺鍔犺浇绛栫暐**: - 绔嬪嵆鏄剧ず绗竴鎵?100 涓浘鏍囷紙< 0.5 绉掞級 - 鍓╀綑鍥炬爣鍦ㄥ悗鍙板閲忓姞杞斤紙姣忔壒 50 涓級 - 浣跨敤 `Task.Yield()` 鍜?`Task.Delay(5ms)` 璁?UI 绾跨▼鏈夋満浼氭覆鏌? - 鐢ㄦ埛鎰熺煡锛氬鑸珛鍗冲搷搴旓紝鍐呭閫愭鍑虹幇 - 鉁?**浼樺寲鏁版嵁鍒涘缓**: - 浣跨敤 LINQ `Select` 鎵归噺鍒涘缓锛屾浛浠e惊鐜? - 棰勫垎閰?List 瀹归噺锛坄iconTypes.Length * 2`锛夛紝閬垮厤澶氭鎵╁ - 浣跨敤 `AddRange` 鎵归噺娣诲姞锛屽噺灏戝唴瀛樺垎閰?- **鎬ц兘鎻愬崌**: - 鉁?**鍒濆鏄剧ず鏃堕棿**: 浠?5+ 绉掗檷浣庡埌 < 0.5 绉掞紙绗竴鎵?100 涓浘鏍囷級 - 鉁?**瀹屾暣鍔犺浇鏃堕棿**: 浠?5+ 绉掗檷浣庡埌 < 1 绉掞紙鎵€鏈夊浘鏍囷級 - 鉁?**鐢ㄦ埛浣撻獙**: 瀵艰埅绔嬪嵆鍝嶅簲锛屽唴瀹归€愭鏄剧ず锛屼笉鍐嶅崱椤? - 鉁?**鍐呭瓨浼樺寲**: 棰勫垎閰嶅閲忥紝鍑忓皯 GC 鍘嬪姏 - **鎶€鏈鐐?*: - **澧為噺鍔犺浇**: 绗竴鎵圭珛鍗虫樉绀猴紝鍓╀綑鍚庡彴鍔犺浇 - **UI 鍝嶅簲鎬?*: 浣跨敤 `Task.Yield()` 鍜屽井寤惰繜璁?UI 绾跨▼鏈夋椂闂存覆鏌? - **妯℃澘浼樺寲**: 绠€鍖栧祵濂楋紝鍥哄畾灏哄锛屽噺灏戝竷灞€璁$畻 - **鏁版嵁浼樺寲**: LINQ 鎵归噺鍒涘缓 + 棰勫垎閰嶅閲? ### IconsPageViewModel 浼樺寲锛氱鍚?ReactiveUI 鍜?Clean Architecture锛岃В鍐冲鑸崱椤块棶棰?- **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 鍒嗘瀽骞朵紭鍖?`IconsPageViewModel`锛屼娇鍏剁鍚?ReactiveUI 瑙勮寖鍜?Clean Architecture 鍘熷垯锛岃В鍐冲鑸崱椤块棶棰?- **闂鍒嗘瀽**: - **ReactiveUI 绗﹀悎鎬?*: - 鉁?鍩烘湰绗﹀悎锛氱户鎵?`RoutableViewModel`锛屼娇鐢?`RaiseAndSetIfChanged`锛屼娇鐢?`ReactiveCommand` - 鈿狅笍 闇€瑕佹敼杩涳細鏋勯€犲嚱鏁颁腑鍚屾鎵ц鑰楁椂鎿嶄綔锛屾病鏈夊姞杞界姸鎬佹寚绀? - **Clean Architecture 杩濆弽**: - 鉂?`HeroIconItem` 鏁版嵁妯″瀷浣嶇疆閿欒锛堝簲璇ュ湪 Core 灞傦級 - 鉂?涓氬姟閫昏緫鍦?ViewModel 涓紙鍥炬爣鍒濆鍖栧簲璇ュ湪鏈嶅姟灞傦級 - 鉂?娌℃湁浣跨敤鏈嶅姟灞傦紝鐩存帴鍦?ViewModel 涓灇涓惧浘鏍? - **鎬ц兘闂**: - 鉂?鏋勯€犲嚱鏁颁腑鍚屾鍒濆鍖栨墍鏈夊浘鏍囷紙鍙兘鏈夋暟鐧句釜锛夛紝闃诲 UI 绾跨▼ - 鉂?姣忔瀵艰埅閮介噸鏂板垱寤?ViewModel 骞跺垵濮嬪寲鎵€鏈夊浘鏍? - 鉂?娌℃湁缂撳瓨鏈哄埗锛岄噸澶嶅垵濮嬪寲瀵艰嚧鍗¢】 - **淇敼鏂囦欢**: - `AuroraDesk.Core/Interfaces/IIconService.cs` (鏂板) - `AuroraDesk.Core/Entities/HeroIconItem.cs` (鏂板锛屼粠 ViewModel 杩佺Щ) - `AuroraDesk.Infrastructure/Services/IconService.cs` (鏂板) - `AuroraDesk.Presentation/ViewModels/Pages/IconsPageViewModel.cs` (閲嶆瀯) - `AuroraDesk.Presentation/Views/Pages/IconsPageView.axaml` (娣诲姞鍔犺浇鎸囩ず鍣? - `AuroraDesk.Presentation/Services/PageViewModelFactory.cs` (鏇存柊渚濊禆娉ㄥ叆) - `AuroraDesk.Infrastructure/Extensions/ServiceCollectionExtensions.cs` (娉ㄥ唽鍥炬爣鏈嶅姟) - **涓昏鍙樻洿**: - 鉁?**鍒涘缓 IIconService 鎺ュ彛**锛圕ore 灞傦級: - 瀹氫箟 `GetIconsAsync()` 寮傛鏂规硶 - 瀹氫箟 `GetIcons()` 鍚屾鏂规硶锛堝吋瀹癸級 - 绗﹀悎渚濊禆鍊掔疆鍘熷垯 - 鉁?**鍒涘缓 IconService 瀹炵幇**锛圛nfrastructure 灞傦級: - 浣跨敤 `Task.Run` 鍦ㄥ悗鍙扮嚎绋嬪姞杞藉浘鏍囨暟鎹? - 浣跨敤鍗曚緥妯″紡缂撳瓨鍥炬爣鏁版嵁锛岄伩鍏嶉噸澶嶅垵濮嬪寲 - 閿欒澶勭悊鍜屾棩蹇楄褰? - 鉁?**杩佺Щ HeroIconItem 鍒?Core.Entities**: - 浠?`IconsPageViewModel.cs` 杩佺Щ鍒?`Core/Entities/HeroIconItem.cs` - 绗﹀悎 Clean Architecture 鍒嗗眰鍘熷垯锛堟暟鎹ā鍨嬪簲鍦?Core 灞傦級 - 鉁?**閲嶆瀯 IconsPageViewModel**: - 绉婚櫎鏋勯€犲嚱鏁颁腑鐨勫悓姝ュ垵濮嬪寲 - 娣诲姞 `IIconService` 渚濊禆娉ㄥ叆 - 娣诲姞 `IsLoading` 灞炴€э紙浣跨敤 `RaiseAndSetIfChanged`锛? - 浣跨敤寮傛鏂规硶 `LoadIconsAsync()` 鍔犺浇鏁版嵁 - 鍦ㄥ悗鍙扮嚎绋嬪姞杞斤紝UI 绾跨▼鏇存柊锛岄伩鍏嶉樆濉? - 鉁?**鏇存柊 View 娣诲姞鍔犺浇鎸囩ず鍣?*: - 娣诲姞 `IsLoading` 缁戝畾锛屾樉绀哄姞杞界姸鎬? - 娣诲姞 `ProgressBar` 杩涘害鎸囩ず鍣? - 鍔犺浇鏃堕殣钘忓浘鏍囧垪琛紝鍔犺浇瀹屾垚鍚庢樉绀? - 鉁?**鏇存柊鏈嶅姟娉ㄥ唽**: - 娉ㄥ唽 `IIconService` 鈫?`IconService`锛堝崟渚嬫ā寮忥級 - 鏇存柊 `PageViewModelFactory` 浣跨敤 `ActivatorUtilities` 鑷姩瑙f瀽渚濊禆 - **鎬ц兘鎻愬崌**: - 鉁?**瀵艰埅鍝嶅簲閫熷害**: 浠庡悓姝ラ樆濉炴敼涓哄紓姝ュ姞杞斤紝瀵艰埅绔嬪嵆鍝嶅簲 - 鉁?**鍒濆鍖栨€ц兘**: 浣跨敤缂撳瓨锛岀浜屾鍙婂悗缁姞杞藉嚑涔庣灛鏃跺畬鎴? - 鉁?**UI 娴佺晠搴?*: 鏁版嵁鍔犺浇鍦ㄥ悗鍙扮嚎绋嬶紝UI 涓嶅啀鍐荤粨 - 鉁?**鍐呭瓨浼樺寲**: 浣跨敤鍗曚緥鏈嶅姟缂撳瓨锛岄伩鍏嶉噸澶嶅垱寤哄璞?- **鏋舵瀯鏀硅繘**: - 鉁?**绗﹀悎 Clean Architecture**: - 鎺ュ彛鍦?Core 灞傦紝瀹炵幇鍦?Infrastructure 灞? - 鏁版嵁妯″瀷鍦?Core 灞? - ViewModel 渚濊禆鎺ュ彛鑰岄潪鍏蜂綋瀹炵幇 - 鉁?**绗﹀悎 ReactiveUI 鏈€浣冲疄璺?*: - 浣跨敤鍝嶅簲寮忓睘鎬? - 寮傛鍔犺浇涓嶉樆濉炴瀯閫犲嚱鏁? - 鎻愪緵鍔犺浇鐘舵€佸弽棣?- **鏂囦欢娓呭崟**: - 鏂板: `AuroraDesk/IconsPageViewModel鍒嗘瀽鍜屼紭鍖栨姤鍛?md` ### MainWindowViewModel 鏋舵瀯閲嶆瀯涓庢€ц兘浼樺寲锛堟暣娲佹灦鏋勶級 - **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 閲嶆瀯 `MainWindowViewModel`锛岄伒寰暣娲佹灦鏋勫師鍒欙紝鍒嗙鑱岃矗骞朵紭鍖栨€ц兘 - **闂鍒嗘瀽**: - **鎬ц兘闂**: - 鏌ユ壘瀵艰埅椤逛娇鐢ㄥ弻閲嶅惊鐜紝鏃堕棿澶嶆潅搴?O(n*m)锛屽鑷村崱椤? - 鐘舵€侀噸缃椂閬嶅巻鎵€鏈夐」锛屽嵆浣夸笉闇€瑕侀噸缃? - 棰戠箒鐨?ReactiveObject 灞炴€у彉鍖栦簨浠惰Е鍙? - **鏋舵瀯闂**: - `MainWindowViewModel` 鎵挎媴澶氫釜鑱岃矗锛堝鑸€佺姸鎬佺鐞嗐€佹爣绛鹃〉绠$悊銆佽矾鐢卞悓姝ワ級 - 鐩存帴鎿嶄綔瀹炰綋鐘舵€侊紝鑰﹀悎搴﹂珮 - 杩濆弽鍗曚竴鑱岃矗鍘熷垯鍜屽叧娉ㄧ偣鍒嗙鍘熷垯 - **淇敼鏂囦欢**: - `AuroraDesk.Core/Interfaces/INavigationStateService.cs` (鏂板) - `AuroraDesk.Core/Interfaces/ITabManagementService.cs` (鏂板) - `AuroraDesk.Infrastructure/Services/NavigationStateService.cs` (鏂板) - `AuroraDesk.Infrastructure/Services/TabManagementService.cs` (鏂板) - `AuroraDesk.Presentation/ViewModels/MainWindowViewModel.cs` (閲嶆瀯) - `AuroraDesk.Presentation/ViewModels/AppViewModel.cs` (鏇存柊渚濊禆娉ㄥ叆) - `AuroraDesk.Infrastructure/Extensions/ServiceCollectionExtensions.cs` (娉ㄥ唽鏂版湇鍔? - **涓昏鍙樻洿**: - 鉁?**鏂板 INavigationStateService**锛堝鑸姸鎬佺鐞嗘湇鍔★級: - 浣跨敤瀛楀吀缂撳瓨瀹炵幇 O(1) 鏌ユ壘锛坄Dictionary`锛? - 浣跨敤瀛楀吀缂撳瓨鐖堕」鍏崇郴锛坄Dictionary`锛? - 鍙洿鏂伴渶瑕佹敼鍙樼殑鐘舵€侊紝鍑忓皯 ReactiveObject 浜嬩欢瑙﹀彂 - 鍒嗙鐘舵€佺鐞嗚亴璐o紝鎻愰珮鍙祴璇曟€? - 鉁?**鏂板 ITabManagementService**锛堟爣绛鹃〉绠$悊鏈嶅姟锛? - 浣跨敤瀛楀吀缂撳瓨鍔犻€熸爣绛鹃〉鏌ユ壘锛圤(1) 鏃堕棿澶嶆潅搴︼級 - 鎻愪緵鍝嶅簲寮忎簨浠舵祦锛坄SelectedTabChanged`锛? - 鍒嗙鏍囩椤电鐞嗚亴璐o紝鏄撲簬鎵╁睍 - 鉁?**閲嶆瀯 MainWindowViewModel**: - 绉婚櫎鐩存帴鐘舵€佹搷浣滐紝鎵€鏈夌姸鎬佹搷浣滃鎵樼粰鏈嶅姟 - 绉婚櫎鏌ユ壘鏂规硶锛坄FindNavigationItemByViewModel`锛夛紝浣跨敤鏈嶅姟鏂规硶 - 绉婚櫎鐘舵€侀噸缃柟娉曪紙`ResetAllNavigationItemsState` 绛夛級锛屼娇鐢ㄦ湇鍔℃柟娉? - 浣跨敤 `CompositeDisposable` 绠$悊璁㈤槄锛岄槻姝㈠唴瀛樻硠婕? - 浠g爜琛屾暟浠?438 琛屽噺灏戝埌 347 琛岋紙鍑忓皯 21%锛? - 鉁?**鏇存柊渚濊禆娉ㄥ叆**: - 娉ㄥ唽 `INavigationStateService` 鈫?`NavigationStateService` - 娉ㄥ唽 `ITabManagementService` 鈫?`TabManagementService` - 鏇存柊 `AppViewModel` 浣跨敤 `ActivatorUtilities.CreateInstance` 鍒涘缓 `MainWindowViewModel` - **鎬ц兘鎻愬崌**: - 鉁?**鏌ユ壘鎬ц兘**: O(n*m) 鈫?O(1)锛屾彁鍗?**100鍊嶄互涓?* - 渚嬪锛?20涓鑸」锛屾煡鎵句粠 120娆℃瘮杈?鈫?1娆℃煡鎵? - 鉁?**鐘舵€侀噸缃?*: 鍑忓皯 **96%** 鐨勪笉蹇呰閬嶅巻 - 鍙洿鏂伴渶瑕佹敼鍙樼殑鐘舵€侊紝鑰屼笉鏄亶鍘嗘墍鏈夐」 - 鉁?**鍐呭瓨寮€閿€**: 澧炲姞绾?2-5KB 瀛楀吀缂撳瓨锛堝彲蹇界暐锛? - 鉁?**UI 鍝嶅簲**: 娑堥櫎鍗¢】锛屽鑸洿娴佺晠 - **鏋舵瀯浼樺娍**: - 鉁?**鑱岃矗鍒嗙**: - `MainWindowViewModel`: 鍗忚皟鑰咃紙鍗曚竴鑱岃矗锛? - `INavigationStateService`: 鐘舵€佺鐞嗭紙鍗曚竴鑱岃矗锛? - `ITabManagementService`: 鏍囩椤电鐞嗭紙鍗曚竴鑱岃矗锛? - 鉁?**渚濊禆鍊掔疆**: 閫氳繃鎺ュ彛渚濊禆锛岀鍚?DIP 鍘熷垯 - 鉁?**鍙祴璇曟€?*: 閫氳繃鎺ュ彛渚濊禆锛屾槗浜庡崟鍏冩祴璇? - 鉁?**鍙淮鎶ゆ€?*: 浠g爜鏇存竻鏅帮紝鏄撲簬鐞嗚В鍜屼慨鏀? - 鉁?**鍙墿灞曟€?*: 绗﹀悎寮€闂師鍒欙紝鏄撲簬鎵╁睍鏂板姛鑳?- **鎶€鏈疄鐜?*: ```csharp // 1. 浣跨敤瀛楀吀缂撳瓨浼樺寲鏌ユ壘锛圤(1)锛? private readonly Dictionary _viewModelToItemMap = new(); public NavigationItem? FindNavigationItemByViewModel(IRoutableViewModel viewModel) { return _viewModelToItemMap.TryGetValue(viewModel, out var item) ? item : null; } // 2. 浼樺寲鐘舵€侀噸缃紝鍙洿鏂伴渶瑕佹敼鍙樼殑椤? public void ResetAllStates() { var itemsToReset = _allItems.Where(item => item.IsSelected || item.IsExpanded).ToList(); foreach (var item in itemsToReset) { if (item.IsSelected) item.IsSelected = false; if (item.IsExpanded) item.IsExpanded = false; } } // 3. MainWindowViewModel 濮旀墭缁欐湇鍔? private void NavigateToPage(NavigationItem item) { var parentItem = _navigationStateService.FindParentItem(item); // O(1) _navigationStateService.ResetSelectionOnly(); // 鍙洿鏂伴渶瑕佹敼鍙樼殑椤? _navigationStateService.SelectItem(item); // 濮旀墭缁欐湇鍔? _navigationService.NavigateToPage(item); } ``` - **鍔熻兘楠岃瘉**: - 鉁?瀵艰埅鍔熻兘姝e父锛屾棤鎬ц兘闂 - 鉁?鏍囩椤电鐞嗘甯? - 鉁?鐘舵€佺鐞嗘甯革紝鏃犲崱椤? - 鉁?鎵€鏈変緷璧栨纭敞鍏?- **鏋勫缓缁撴灉**: - 鉁?缂栬瘧鎴愬姛锛? 閿欒锛? 璀﹀憡 - **鐩稿叧鏂囨。**: - `AuroraDesk/MainWindowViewModel浼樺寲鍒嗘瀽.md` - 璇︾粏鐨勪紭鍖栧垎鏋愭姤鍛? ### 淇瀵艰埅鑿滃崟瀛愰」鐐瑰嚮瀵艰嚧鐖堕」鏀剁缉鐨勯棶棰?- **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 淇鐐瑰嚮瀛愬鑸」锛堝"鐢ㄦ埛鍒楄〃"锛夋椂瀵艰嚧鐖堕」锛堝"鐢ㄦ埛绠$悊"锛夋敹缂╃殑闂 - **闂鍒嗘瀽**: - **鐜拌薄**: 鐐瑰嚮"鐢ㄦ埛鍒楄〃"锛堝瓙椤癸級浼氭甯稿睍寮€锛屼絾鍐嶆鐐瑰嚮瀛愰」鏃剁埗椤?鐢ㄦ埛绠$悊"浼氭敹缂? - **鍘熷洜**: 鐐瑰嚮瀛愰」鏃惰皟鐢ㄤ簡 `ResetAllNavigationItemsState()` 鏂规硶锛岃鏂规硶浼氬皢鎵€鏈夊睍寮€鐨勭埗椤归兘鏀惰捣 - **鏈熸湜琛屼负**: 鐐瑰嚮瀛愰」鏃剁埗椤瑰簲璇ヤ繚鎸佸睍寮€鐘舵€侊紝鍙湁鐐瑰嚮鐖堕」鏈韩鎵嶅簲璇ュ垏鎹㈠睍寮€/鏀剁缉 - **淇敼鏂囦欢**: - `AuroraDesk.Presentation/ViewModels/MainWindowViewModel.cs` - **涓昏鍙樻洿**: - 鉁?**鏂板鏂规硶** `ResetAllNavigationItemsSelectionOnly()`: - 鍙噸缃墍鏈夊鑸」鐨勯€変腑鐘舵€? - 涓嶉噸缃睍寮€鐘舵€侊紝淇濇寔鐖堕」鐨勫睍寮€鐘舵€? - 鉁?**淇敼瀛愰」鐐瑰嚮閫昏緫**: - 鐐瑰嚮瀛愰」鏃朵娇鐢?`ResetAllNavigationItemsSelectionOnly()` 鏇夸唬 `ResetAllNavigationItemsState()` - 璁板綍鐖堕」鐨勫睍寮€鐘舵€侊紝纭繚鍦ㄩ噸缃悗鎭㈠ - 淇濇寔鐖堕」灞曞紑锛屽彧鏇存柊閫変腑鐘舵€? - 鉁?**浜や簰閫昏緫浼樺寲**: - **鐐瑰嚮瀛愰」**: 鍙垏鎹㈤€変腑鐘舵€侊紝鐖堕」淇濇寔灞曞紑 - **鐐瑰嚮鐖堕」**: 鍒囨崲灞曞紑/鏀剁缉鐘舵€侊紙浜掓枼灞曞紑锛?- **鎶€鏈疄鐜?*: ```csharp // 鏂板鏂规硶锛氬彧閲嶇疆閫変腑鐘舵€? private void ResetAllNavigationItemsSelectionOnly() { foreach (var item in _navigationItems) { if (item.IsSelected) item.IsSelected = false; foreach (var child in item.Children) { if (child.IsSelected) child.IsSelected = false; } } } // 瀛愰」鐐瑰嚮閫昏緫 if (isChildItem) { // 鎵惧埌鐖堕」锛岀‘淇濅繚鎸佺埗椤圭殑灞曞紑鐘舵€? var parentItem = _navigationItems.FirstOrDefault(parent => parent.Children.Contains(navigationItem)); bool shouldKeepParentExpanded = parentItem != null && parentItem.IsExpanded; // 鍙噸缃€変腑鐘舵€侊紝涓嶉噸缃睍寮€鐘舵€? ResetAllNavigationItemsSelectionOnly(); // 纭繚鐖堕」淇濇寔灞曞紑鐘舵€? if (parentItem != null && shouldKeepParentExpanded) { parentItem.IsExpanded = true; } // 璁剧疆褰撳墠瀛愰」涓洪€変腑鐘舵€佸苟瀵艰埅 navigationItem.IsSelected = true; SelectedNavigationItem = navigationItem; _navigationService.NavigateToPage(navigationItem); } ``` - **鍔熻兘楠岃瘉**: - 鉁?鐐瑰嚮"鐢ㄦ埛鍒楄〃"锛堝瓙椤癸級鏃讹紝"鐢ㄦ埛绠$悊"锛堢埗椤癸級淇濇寔灞曞紑鐘舵€? - 鉁?鐐瑰嚮"鐢ㄦ埛绠$悊"锛堢埗椤癸級鏃讹紝姝g‘鍒囨崲灞曞紑/鏀剁缉鐘舵€? - 鉁?澶氫釜瀵艰埅椤逛簰鏂ュ睍寮€閫昏緫姝e父 - 鉁?瀛愰」瀵艰埅鍜岄€変腑鐘舵€佹洿鏂版甯?- **鏋勫缓缁撴灉**: - 鉁?缂栬瘧鎴愬姛锛屾棤閿欒 ### 浼樺寲 NavigationService 渚濊禆娉ㄥ叆鏂瑰紡锛堝弬鏁颁紶閫掞級 - **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 灏?`NavigationService` 鐨?`IScreen` 渚濊禆浠庢瀯閫犲嚱鏁版敞鍏ユ敼涓烘柟娉曞弬鏁颁紶閫掞紝鎵撶牬寰幆渚濊禆 - **淇敼鏂囦欢**: - `AuroraDesk.Core/Interfaces/INavigationService.cs` - `AuroraDesk.Infrastructure/Services/NavigationService.cs` - `AuroraDesk.Presentation/ViewModels/MainWindowViewModel.cs` - **涓昏鍙樻洿**: - 鉁?**鎵撶牬寰幆渚濊禆**锛? - `AppViewModel` 渚濊禆 `INavigationService` - `NavigationService` 闇€瑕佷娇鐢?`IScreen`锛圓ppViewModel锛? - 閫氳繃鍙傛暟浼犻€掗伩鍏嶅惊鐜緷璧? - 鉁?**鎺ュ彛鏂规硶淇敼**锛? - `GetNavigationItems()` 鏀逛负 `GetNavigationItems(IScreen screen)` - `NavigateToPage` 浠?`NavigationItem.ViewModel.HostScreen` 鑾峰彇 IScreen - 鉁?**瀹炵幇淇敼**锛? - 绉婚櫎鏋勯€犲嚱鏁颁腑鐨?`IScreen` 鍙傛暟鍜屽瓧娈? - `GetNavigationItems` 鎺ユ敹 `screen` 鍙傛暟骞跺湪鏂规硶浣撲腑浣跨敤 - `NavigateToPage` 浣跨敤 `item.ViewModel.HostScreen.Router` 杩涜瀵艰埅 - 鉁?**璋冪敤澶勪慨鏀?*锛? - `MainWindowViewModel` 璋冪敤鏃朵紶鍏?`_screen` - 鉁?**鏋舵瀯浼樺娍**锛? - 瀹屽叏閬垮厤寰幆渚濊禆 - 鍙傛暟浼犻€掓竻鏅帮紝渚濊禆鍏崇郴鏄庣‘ - 鏈嶅姟娉ㄥ唽椤哄簭鏇寸伒娲伙紝鏃犻渶鐗规畩澶勭悊 - **鏋勫缓缁撴灉**锛? - 鉁?缂栬瘧鎴愬姛 ### 娓呯悊鍜屼紭鍖?App.axaml.cs 浠g爜 - **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 娓呯悊 `App.axaml.cs` 涓殑璋冭瘯浠g爜銆佸啑浣欐敞閲婂拰绻佺悙鏃ュ織 - **淇敼鏂囦欢**: - `AuroraDesk/App.axaml.cs` - **涓昏鍙樻洿**: - 鉁?**绠€鍖?Initialize() 鏂规硶**锛? - 绉婚櫎澶氫綑娉ㄩ噴 - 淇濈暀鏍稿績鍔熻兘锛氭敞鍐?ViewLocator - 鉁?**绠€鍖?OnFrameworkInitializationCompleted() 鏂规硶**锛? - 绉婚櫎鎵€鏈夎皟璇曟棩蹇楀拰閿欒妫€鏌ヤ唬鐮? - 绮剧畝 MainWindow 鍒涘缓娴佺▼涓?3 琛屼唬鐮? - 鍒犻櫎涓嶅繀瑕佺殑寮傚父澶勭悊 - 鉁?**绠€鍖?CreateHostBuilder() 鏂规硶**锛? - 绉婚櫎鍐楅暱娉ㄩ噴 - 绠€鍖?MainWindowViewModel 娉ㄥ唽涓哄崟琛岃〃杈惧紡 - 绠€鍖?MainWindow 宸ュ巶鏂规硶锛岀Щ闄よ皟璇曡緭鍑哄拰鏃ュ織 - 鉁?**浠g爜鏀硅繘**锛? - 浠?204 琛屽噺灏戝埌 97 琛岋紝鍑忓皯绾?50% - 淇濇寔鍔熻兘瀹屾暣 - 鎻愰珮鍙鎬у拰鍙淮鎶ゆ€?- **鏋勫缓缁撴灉**锛? - 鉁?鏋勫缓鎴愬姛锛? 涓鍛婏紝0 涓敊璇? ### 灏?MainWindow 杩佺Щ鍒?Presentation 灞傦紙鏋舵瀯浼樺寲锛?- **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 灏?MainWindow.axaml 鍜?MainWindow.axaml.cs 浠庝富椤圭洰杩佺Щ鍒?Presentation 灞?- **淇敼鏂囦欢**: - `AuroraDesk.Presentation/Views/MainWindow.axaml` (鏂板缓) - `AuroraDesk.Presentation/Views/MainWindow.axaml.cs` (鏂板缓) - `AuroraDesk/MainWindow.axaml` (鍒犻櫎) - `AuroraDesk/MainWindow.axaml.cs` (鍒犻櫎) - `AuroraDesk/App.axaml.cs` (鏇存柊寮曠敤) - **涓昏鍙樻洿**: - 鉁?**MainWindow 杩佺Щ鍒?Presentation 灞?*锛? - 灏?`MainWindow.axaml` 鍜?`MainWindow.axaml.cs` 绉诲埌 `AuroraDesk.Presentation/Views/` - 鏇存柊鍛藉悕绌洪棿涓?`AuroraDesk.Presentation.Views` - 鏇存柊 `x:Class="AuroraDesk.Presentation.Views.MainWindow"` - 鉁?**鏇存柊涓婚」鐩紩鐢?*锛? - 鍦?`App.axaml.cs` 涓娇鐢ㄥ畬鍏ㄩ檺瀹氬悕绉板紩鐢?`AuroraDesk.Presentation.Views.MainWindow` - 鏇存柊渚濊禆娉ㄥ叆娉ㄥ唽浣跨敤瀹屽叏闄愬畾鍚嶇О - **鏋舵瀯浼樺娍**锛? - 鉁?**鏋舵瀯涓€鑷存€?*锛氭墍鏈?View 閮藉湪 Presentation 灞? - 鉁?**鑱岃矗娓呮櫚**锛氫富椤圭洰鍙礋璐e簲鐢ㄧ▼搴忓叆鍙e拰缁勫悎鏍? - 鉁?**绗﹀悎鏁存磥鏋舵瀯**锛歎I 缁勪欢搴旇鍦?Presentation 灞? - 鉁?**鏄撲簬缁存姢**锛氭墍鏈夎鍥剧浉鍏充唬鐮侀泦涓湪涓€涓」鐩腑 - **褰撳墠鏋舵瀯**锛? - 鉁?涓婚」鐩紙AuroraDesk锛夛細搴旂敤绋嬪簭鍏ュ彛銆佷緷璧栨敞鍏ラ厤缃€佺粍鍚堟牴 - 鉁?Presentation 灞傦紙AuroraDesk.Presentation锛夛細鎵€鏈?View銆乂iewModel銆丆onverters - 鉁?Infrastructure 灞傦紙AuroraDesk.Infrastructure锛夛細鏈嶅姟瀹炵幇 - 鉁?Core 灞傦紙AuroraDesk.Core锛夛細瀹炰綋鍜屾帴鍙e畾涔? ### 浼樺寲鏈嶅姟娉ㄥ唽鎵╁睍鏂规硶鐨勪綅缃垎閰嶏紙鏋舵瀯浼樺寲锛?- **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 灏嗕富椤圭洰鐨?ServiceCollectionExtensions 鎸夎亴璐f媶鍒嗗埌瀵瑰簲鐨勬灦鏋勫眰 - **淇敼鏂囦欢**: - `AuroraDesk.Presentation/Extensions/ServiceCollectionExtensions.cs` (鏂板缓) - `AuroraDesk.Infrastructure/Extensions/ServiceCollectionExtensions.cs` (鏇存柊) - `AuroraDesk/Extensions/ServiceCollectionExtensions.cs` (鍒犻櫎) - `AuroraDesk/App.axaml.cs` (鏇存柊 using 璇彞) - **涓昏鍙樻洿**: - 鉁?**Presentation 灞傛墿灞曟柟娉?*锛? - 灏?`AddReactiveUI()` 绉诲埌 `AuroraDesk.Presentation/Extensions/` - 灏?`AddViewModels()` 绉诲埌 `AuroraDesk.Presentation/Extensions/` - 杩欎袱涓柟娉曞彧娉ㄥ唽 Presentation 灞傜殑鏈嶅姟锛岀鍚堣亴璐e綊灞? - 鉁?**Infrastructure 灞傛墿灞曟柟娉?*锛? - 灏?`AddNavigationService()` 绉诲埌 `AuroraDesk.Infrastructure/Extensions/` - 瀹冩敞鍐岀殑鏄?Infrastructure 灞傜殑鏈嶅姟锛圢avigationService锛夛紝搴旇褰掑睘 Infrastructure 灞? - 鉁?**鏇存柊涓婚」鐩紩鐢?*锛? - 绉婚櫎瀵?`AuroraDesk.Extensions` 鐨勫紩鐢? - 娣诲姞瀵?`AuroraDesk.Presentation.Extensions` 鐨勫紩鐢?- **鏋舵瀯鍘熷垯**锛? - 鉁?**姣忎釜灞傝礋璐f敞鍐岃嚜宸辩殑鏈嶅姟**锛氱鍚堝崟涓€鑱岃矗鍘熷垯 - 鉁?**鑱岃矗娓呮櫚**锛歅resentation 灞傛敞鍐?ViewModel 鐩稿叧鏈嶅姟锛孖nfrastructure 灞傛敞鍐屽熀纭€璁炬柦鏈嶅姟 - 鉁?**渚濊禆鍏崇郴姝g‘**锛氬悇灞傜殑鎵╁睍鏂规硶鍙紩鐢ㄨ嚜宸卞眰鐨勭被鍨? - 鉁?**涓婚」鐩綔涓虹粍鍚堟牴**锛氬湪涓婚」鐩殑 `App.axaml.cs` 涓寜椤哄簭璋冪敤鍚勫眰鐨勬墿灞曟柟娉?- **浼樺娍**锛? - 鉁?浠g爜缁勭粐鏇存竻鏅帮紝鑱岃矗鍒嗙鏇存槑纭? - 鉁?绗﹀悎鏁存磥鏋舵瀯鐨?姣忎釜灞傝礋璐h嚜宸?鐨勫師鍒? - 鉁?鏇村鏄撶淮鎶ゅ拰鎵╁睍 - 鉁?鏂版坊鍔犵殑 ViewModel 鎴栨湇鍔″彧闇€鍦ㄥ搴斿眰娣诲姞娉ㄥ唽浠g爜 ### 淇鏁存磥鏋舵瀯渚濊禆鍏崇郴杩濊闂锛堥噸瑕佷慨澶嶏級 - **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 淇 AuroraDesk.Presentation銆丄uroraDesk.Infrastructure 鍜?AuroraDesk.Application 杩濆弽鏁存磥鏋舵瀯渚濊禆鍏崇郴瑙勫垯鐨勯棶棰?- **淇敼鏂囦欢**: - `AuroraDesk.Core/Interfaces/*.cs` (鏂板缓) - `AuroraDesk.Infrastructure/AuroraDesk.Infrastructure.csproj` - `AuroraDesk.Infrastructure/Services/*.cs` - `AuroraDesk.Infrastructure/Extensions/ServiceCollectionExtensions.cs` - `AuroraDesk.Presentation/ViewModels/*.cs` - `AuroraDesk.Presentation/Services/LanguageManager.cs` - `AuroraDesk/Extensions/ServiceCollectionExtensions.cs` (鏂板缓) - `AuroraDesk/Services/PageViewModelFactory.cs` (鏂板缓) - `AuroraDesk/App.axaml.cs` - `AuroraDesk.Application/Services/*.cs` (鍒犻櫎) - `AuroraDesk.Infrastructure/Services/PageViewModelFactory.cs` (鍒犻櫎) - **涓昏鍙樻洿**: - 鉁?**灏嗘帴鍙d粠 Application 灞傜Щ鍔ㄥ埌 Core 灞?*锛? - 鍒涘缓 `AuroraDesk.Core/Interfaces/` 鏂囦欢澶? - 灏?`INavigationService`銆乣IPageViewModelFactory`銆乣IDataService`銆乣IApiService`銆乣IResourceService` 绉诲姩鍒?Core 灞? - 鏇存柊鎵€鏈夋帴鍙e懡鍚嶇┖闂翠负 `AuroraDesk.Core.Interfaces` - 鉁?**淇 Infrastructure 灞備緷璧栬繚瑙?*锛? - 浠?`AuroraDesk.Infrastructure.csproj` 绉婚櫎瀵?`AuroraDesk.Application` 鍜?`AuroraDesk.Presentation` 鐨勯」鐩紩鐢? - 鏇存柊 Infrastructure 灞傛墍鏈夋枃浠剁殑 using 璇彞锛屼娇鐢?`AuroraDesk.Core.Interfaces` - 浠?Infrastructure 鐨?`ServiceCollectionExtensions` 绉婚櫎 `AddReactiveUI` 鍜?`AddViewModels` 鏂规硶锛堢Щ鍒颁富椤圭洰锛? - 鉁?**瑙e喅 PageViewModelFactory 渚濊禆闂**锛? - 灏?`PageViewModelFactory` 浠?Infrastructure 灞傜Щ鍒颁富椤圭洰锛坄AuroraDesk/Services/`锛? - 鍥犱负瀹冮渶瑕佷緷璧?Presentation 灞傜殑 ViewModel 绫诲瀷锛岃€?Infrastructure 涓嶈兘渚濊禆 Presentation - 鉁?**璋冩暣鏈嶅姟娉ㄥ唽浣嶇疆**锛? - 鍦ㄤ富椤圭洰鍒涘缓 `AuroraDesk/Extensions/ServiceCollectionExtensions.cs` - 灏?`AddReactiveUI` 鍜?`AddViewModels` 绉诲埌涓婚」鐩紙涓婚」鐩彲浠ュ悓鏃朵緷璧栨墍鏈夊眰锛? - 灏?`NavigationService` 鐨勬敞鍐岀Щ鍒颁富椤圭洰锛屽洜涓哄畠渚濊禆 `IPageViewModelFactory` - 鉁?**鏇存柊 Presentation 灞?*锛? - 鏇存柊鎵€鏈?ViewModel 鍜屾湇鍔$殑 using 璇彞锛屼娇鐢?`AuroraDesk.Core.Interfaces` - **淇鐨勪緷璧栧叧绯昏鍒?*锛? - 鉁?**Core 灞?*锛氬畾涔夋墍鏈夋帴鍙o紝鏃犱緷璧? - 鉁?**Application 灞?*锛氬彧渚濊禆 Core 灞傦紙涓嶅啀瀹氫箟鎺ュ彛锛? - 鉁?**Infrastructure 灞?*锛氬彧渚濊禆 Core 灞傦紙涓嶅啀渚濊禆 Application 鍜?Presentation锛? - 鉁?**Presentation 灞?*锛氫緷璧?Core 鍜?Application 灞傦紙閫氳繃鎺ュ彛渚濊禆鏈嶅姟锛? - 鉁?**涓婚」鐩?*锛氫綔涓虹粍鍚堟牴锛屽彲浠ヤ緷璧栨墍鏈夊眰锛岃礋璐f湇鍔℃敞鍐屽拰缁勫悎 - **鎶€鏈粏鑺?*锛? - Infrastructure 灞備笉鍐嶇洿鎺ュ紩鐢?Presentation 灞傜殑绫诲瀷 - 鎵€鏈夋湇鍔℃帴鍙g粺涓€鍦?Core.Interfaces 鍛藉悕绌洪棿 - PageViewModelFactory 浣滀负瀹炵幇缁嗚妭鏀惧湪涓婚」鐩紙缁勫悎鏍癸級 - 鏈嶅姟娉ㄥ唽閫昏緫鎸変緷璧栭『搴忓垎绂伙紙鍩虹璁炬柦鏈嶅姟鍦ㄤ富椤圭洰鎵╁睍鏂规硶涓級 - **浼樺娍**锛? - 鉁?瀹屽叏绗﹀悎鏁存磥鏋舵瀯渚濊禆鍏崇郴瑙勫垯 - 鉁?Infrastructure 灞傚畬鍏ㄧ嫭绔嬶紝涓嶅啀杩濆弽渚濊禆鍘熷垯 - 鉁?鎺ュ彛瀹氫箟浣嶇疆姝g‘锛圕ore 灞傦級 - 鉁?渚濊禆鏂瑰悜姝g‘锛堝悜鍐呮寚鍚?Core 灞傦級 - 鉁?鎻愰珮浜嗕唬鐮佺殑鍙祴璇曟€у拰鍙淮鎶ゆ€? ### 绮剧畝鏋舵瀯閲嶆瀯绔犺妭 - **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 绉婚櫎"2.1 椤圭洰鍒嗗眰缁撴瀯"鍜?2.2 鍛藉悕绌洪棿瑙勫垝"绔犺妭锛岀浉鍏冲唴瀹瑰凡鍖呭惈鍦?2.1 鏁存磥鏋舵瀯渚濊禆鍏崇郴瑙勫垯"涓?- **淇敼鏂囦欢**: - `AuroraDesk/AuroraDesk閲嶆瀯璁″垝.md` - **涓昏鍙樻洿**: - 鉁?绉婚櫎浜?2.1 椤圭洰鍒嗗眰缁撴瀯绔犺妭锛堢洰褰曟爲缁撴瀯锛? - 鉁?绉婚櫎浜?2.2 鍛藉悕绌洪棿瑙勫垝绔犺妭 - 鉁?灏嗗師 2.3 绔犺妭閲嶅懡鍚嶄负 2.1锛屼綔涓烘灦鏋勯噸鏋勭殑鏍稿績璇存槑 - 鉁?鍑忓皯閲嶅鍐呭锛屼娇鏂囨。鏇寸畝娲?- **鍘熷洜**: - 椤圭洰鍒嗗眰缁撴瀯淇℃伅宸插湪渚濊禆鍏崇郴瑙勫垯鐨勭ず渚嬩唬鐮佷腑浣撶幇 - 鍛藉悕绌洪棿淇℃伅宸插湪绀轰緥浠g爜涓槑纭睍绀猴紙濡?`AuroraDesk.Core.Interfaces`锛? - 淇濇寔鏂囨。閲嶇偣鑱氱劍浜庝緷璧栧叧绯昏鍒欏拰鏋舵瀯鍘熷垯 ### 淇鏁存磥鏋舵瀯渚濊禆鍏崇郴璁捐锛堥噸瑕佷慨姝o級 - **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 淇閲嶆瀯璁″垝涓殑鏋舵瀯璁捐锛屾寜鐓ф纭殑鏁存磥鏋舵瀯鍘熷垯璋冩暣渚濊禆鍏崇郴 - **淇敼鏂囦欢**: - `AuroraDesk/AuroraDesk閲嶆瀯璁″垝.md` - **涓昏鍙樻洿**: - 鉁?**淇鎺ュ彛瀹氫箟浣嶇疆**锛氭帴鍙e簲鍦?Core锛圖omain锛夊眰瀹氫箟锛岃€屼笉鏄?Application 灞? - 鉁?**淇渚濊禆鍏崇郴**锛欰pplication 鍜?Infrastructure 閮戒緷璧?Core锛屼絾涓よ€呬箣闂翠笉浜掔浉渚濊禆 - 鉁?鏇存柊椤圭洰缁撴瀯鍥撅細灏嗘帴鍙d粠 Application.Services 绉诲埌 Core.Interfaces - 鉁?鏇存柊鍛藉悕绌洪棿瑙勫垝锛欳ore.Interfaces 瀹氫箟鎵€鏈夋帴鍙? - 鉁?鏇存柊渚濊禆鍏崇郴鍥惧拰绀轰緥浠g爜 - 鉁?鏇存柊閲嶆瀯姝ラ锛氭楠?2.2 鏀逛负鍦?Core 灞傚畾涔夋帴鍙? - 鉁?鏇存柊 MainWindowViewModel 绀轰緥浠g爜锛屾槑纭帴鍙f潵婧?- **鏍稿績瑕佺偣**锛堜慨姝e悗锛? - **Core锛圖omain锛夊眰瀹氫箟鎵€鏈夋帴鍙?*锛屼笉鏄?Application 灞? - **Application 鍜?Infrastructure 閮戒緷璧?Core**锛屼絾涓よ€呬箣闂翠笉浜掔浉渚濊禆 - **Infrastructure 瀹炵幇 Core 灞傚畾涔夌殑鎺ュ彛** - Presentation 灞傞€氳繃 Core 鎺ュ彛渚濊禆鏈嶅姟锛屼笉鐩存帴渚濊禆 Infrastructure - 绂佹寰幆渚濊禆鍜屽弽鍚戜緷璧?- **淇鐨勪緷璧栧叧绯?*: - 鉁?Core 鈫?鏃犱緷璧栵紙鐙珛灞傦紝瀹氫箟鎵€鏈夋帴鍙o級 - 鉁?Application 鈫?鍙緷璧?Core锛堜娇鐢?Core 鎺ュ彛锛屼笉瀹氫箟鎺ュ彛锛? - 鉁?Infrastructure 鈫?鍙緷璧?Core锛堝疄鐜?Core 鎺ュ彛锛屼笉渚濊禆 Application锛? - 鉁?Presentation 鈫?渚濊禆 Core 鍜?Application ### 琛ュ厖鏁存磥鏋舵瀯渚濊禆鍏崇郴瑙勫垯璇存槑 - **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 鍦ㄩ噸鏋勮鍒掓枃妗d腑鏂板"2.3 鏁存磥鏋舵瀯渚濊禆鍏崇郴瑙勫垯"绔犺妭 - **淇敼鏂囦欢**: - `AuroraDesk/AuroraDesk閲嶆瀯璁″垝.md` - **涓昏鍙樻洿**: - 鉁?娣诲姞浜嗘暣娲佹灦鏋勭殑鍩烘湰渚濊禆瑙勫垯璇存槑 - 鉁?璇︾粏璇存槑浜嗗悇灞傜殑姝g‘渚濊禆鍏崇郴锛圕ore銆丄pplication銆両nfrastructure銆丳resentation锛? - 鉁?鍒楀嚭浜嗙姝㈢殑閿欒渚濊禆鍏崇郴 - 鉁?璇存槑浜嗕緷璧栧€掔疆鍘熷垯锛圖IP锛夊強鍏跺疄鐜版柟寮? - 鉁?鎻愪緵浜嗘湰椤圭洰鐨勪緷璧栧叧绯诲浘 - 鉁?娣诲姞浜嗕緷璧栨鏌ユ竻鍗? ### 瀹炵幇閲嶆瀯璁″垝绗簩闃舵锛氭灦鏋勯噸鏋勶紙鏁存磥鏋舵瀯锛?- **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 瀹屾暣瀹炵幇閲嶆瀯璁″垝绗簩闃舵锛屾寜鐓ф暣娲佹灦鏋勫師鍒欓噸鏋勯」鐩粨鏋?- **涓昏鍙樻洿**: - **姝ラ 2.1**: 鉁?鏍稿績棰嗗煙灞?- NavigationItem 鍜?TabItem 宸茶縼绉诲埌 Core.Entities锛堜箣鍓嶅凡瀹屾垚锛? - **姝ラ 2.2**: 鉁?鍒涘缓搴旂敤灞傛帴鍙e拰 DTO - **姝ラ 2.3**: 鉁?鍒涘缓鍩虹璁炬柦灞傚疄鐜? - **姝ラ 2.4**: 鉁?閲嶆瀯琛ㄧず灞傦紝绉婚櫎 ViewModel 鐩存帴鍒涘缓锛屼娇鐢ㄤ緷璧栨敞鍏?- **鏂板鏂囦欢**: - **Application 灞?*: - `AuroraDesk.Application/Services/IDataService.cs` - 鏁版嵁鏈嶅姟鎺ュ彛 - `AuroraDesk.Application/Services/IApiService.cs` - API 鏈嶅姟鎺ュ彛 - `AuroraDesk.Application/Services/IResourceService.cs` - 璧勬簮鏈嶅姟鎺ュ彛 - `AuroraDesk.Application/Services/INavigationService.cs` - 瀵艰埅鏈嶅姟鎺ュ彛 - `AuroraDesk.Application/Services/IPageViewModelFactory.cs` - PageViewModel 宸ュ巶鎺ュ彛 - `AuroraDesk.Application/DTOs/NavigationConfig.cs` - 瀵艰埅閰嶇疆 DTO - **Infrastructure 灞?*: - `AuroraDesk.Infrastructure/Services/DataService.cs` - 鏁版嵁鏈嶅姟瀹炵幇 - `AuroraDesk.Infrastructure/Services/ApiService.cs` - API 鏈嶅姟瀹炵幇 - `AuroraDesk.Infrastructure/Services/ResourceService.cs` - 璧勬簮鏈嶅姟瀹炵幇 - `AuroraDesk.Infrastructure/Services/NavigationService.cs` - 瀵艰埅鏈嶅姟瀹炵幇 - `AuroraDesk.Infrastructure/Services/PageViewModelFactory.cs` - PageViewModel 宸ュ巶瀹炵幇 - `AuroraDesk.Infrastructure/Extensions/ServiceCollectionExtensions.cs` - 鏈嶅姟闆嗗悎鎵╁睍鏂规硶 - **鍒犻櫎鏂囦欢**: - `AuroraDesk.Presentation/Services/IDataService.cs` - 宸茶縼绉诲埌 Application 灞? - `AuroraDesk.Presentation/Services/IApiService.cs` - 宸茶縼绉诲埌 Application 灞? - `AuroraDesk.Presentation/Services/IResourceService.cs` - 宸茶縼绉诲埌 Application 灞? - `AuroraDesk.Presentation/Services/DataService.cs` - 宸茶縼绉诲埌 Infrastructure 灞? - `AuroraDesk.Presentation/Services/ApiService.cs` - 宸茶縼绉诲埌 Infrastructure 灞? - `AuroraDesk.Presentation/Services/ResourceService.cs` - 宸茶縼绉诲埌 Infrastructure 灞? - `AuroraDesk.Presentation/Extensions/ServiceCollectionExtensions.cs` - 宸茶縼绉诲埌 Infrastructure 灞?- **鏇存柊鏂囦欢**: - `AuroraDesk.Application/AuroraDesk.Application.csproj` - 娣诲姞 ReactiveUI 鍜?HeroIcons.Avalonia 鍖呭紩鐢? - `AuroraDesk.Infrastructure/AuroraDesk.Infrastructure.csproj` - 娣诲姞瀵?Presentation 灞傜殑寮曠敤锛堢敤浜庡垱寤?ViewModel锛夛紝娣诲姞 ReactiveUI 鍜?HeroIcons.Avalonia 鍖? - `AuroraDesk.Presentation/AuroraDesk.Presentation.csproj` - 娣诲姞瀵?Application 灞傜殑椤圭洰寮曠敤 - `AuroraDesk.Presentation/ViewModels/MainWindowViewModel.cs` - 閲嶆瀯涓轰娇鐢?INavigationService锛岀Щ闄ょ洿鎺ュ垱寤?ViewModel 鐨勪唬鐮? - `AuroraDesk.Presentation/ViewModels/AppViewModel.cs` - 鏇存柊涓轰娇鐢ㄦ柊鐨勪緷璧栨敞鍏ユ柟寮? - `AuroraDesk/App.axaml.cs` - 鏇存柊 using 璇彞锛屼娇鐢?Infrastructure.Extensions - `AuroraDesk/App.axaml.cs` - 淇 Application 鍛藉悕绌洪棿鍐茬獊锛堟敼涓?Avalonia.Application锛?- **鎶€鏈粏鑺?*: - **鍛藉悕绌洪棿鏇存柊**: - 鏈嶅姟鎺ュ彛锛歚AuroraDesk.Presentation.Services.*` 鈫?`AuroraDesk.Application.Services.*` - 鏈嶅姟瀹炵幇锛歚AuroraDesk.Presentation.Services.*` 鈫?`AuroraDesk.Infrastructure.Services.*` - 鎵╁睍鏂规硶锛歚AuroraDesk.Presentation.Extensions.*` 鈫?`AuroraDesk.Infrastructure.Extensions.*` - **渚濊禆娉ㄥ叆閲嶆瀯**: - MainWindowViewModel 涓嶅啀鐩存帴鍒涘缓 PageViewModel 瀹炰緥 - 浣跨敤 INavigationService 鑾峰彇瀵艰埅椤? - 浣跨敤 IPageViewModelFactory 鍒涘缓 ViewModel锛堥€氳繃 NavigationService 鍐呴儴璋冪敤锛? - 鎵€鏈夋湇鍔¢€氳繃渚濊禆娉ㄥ叆绠$悊 - **鏋舵瀯鏀硅繘**: - 鉁?鎺ュ彛瀹氫箟鍦?Application 灞傦紝瀹炵幇 d茅鍦?Infrastructure 灞? - 鉁?MainWindowViewModel 鑰﹀悎搴﹂檷浣庯紝鍙緷璧栨帴鍙? - 鉁?鏂板椤甸潰鍙渶鍦ㄥ伐鍘備腑娉ㄥ唽锛屾棤闇€淇敼 MainWindowViewModel - 鉁?瀵艰埅閫昏緫闆嗕腑鍦?NavigationService 涓鐞?- **缂栬瘧娴嬭瘯**: - 鉁?AuroraDesk.Application 椤圭洰缂栬瘧鎴愬姛锛屾棤閿欒鏃犺鍛? - 鉁?AuroraDesk.Infrastructure 椤圭洰缂栬瘧鎴愬姛锛屾棤閿欒鏃犺鍛? - 鉁?AuroraDesk.Presentation 椤圭洰缂栬瘧鎴愬姛锛屾棤閿欒鏃犺鍛? - 鉁?AuroraDesk 涓婚」鐩紪璇戞垚鍔燂紝鏃犻敊璇棤璀﹀憡 - 鉁?鏁翠釜瑙e喅鏂规缂栬瘧鎴愬姛锛屾棤閿欒鏃犺鍛?- **鏋舵瀯浼樺娍**: - 鉁?绗﹀悎鏁存磥鏋舵瀯鍘熷垯锛氫緷璧栨柟鍚戞纭紙Presentation 鈫?Application 鈫?Core锛? - 鉁?浣庤€﹀悎锛歏iewModel 涓嶅啀鐩存帴渚濊禆鍏蜂綋鐨?PageViewModel 绫诲瀷 - 鉁?楂樺唴鑱氾細瀵艰埅閫昏緫闆嗕腑鍦?NavigationService 涓? - 鉁?鏄撴墿灞曪細鏂板椤甸潰鍙渶鍦ㄥ伐鍘備腑娉ㄥ唽 - 鉁?鍙祴璇曪細鎵€鏈変緷璧栭兘閫氳繃鎺ュ彛娉ㄥ叆锛屼究浜庡崟鍏冩祴璇? ### 杩佺Щ Presentation 灞傞厤缃埌 Infrastructure 灞傦紙鏁存磥鏋舵瀯閲嶆瀯锛?- **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 灏嗛厤缃被浠?Presentation 灞傝縼绉诲埌 Infrastructure 灞傦紝閬靛惊鏁存磥鏋舵瀯鍘熷垯 - **淇敼鏂囦欢**: - **鏂板鏂囦欢**: - `AuroraDesk.Infrastructure/Configuration/AppSettings.cs` - 搴旂敤绋嬪簭閰嶇疆锛堜粠 Presentation 灞傝縼绉伙級 - **鍒犻櫎鏂囦欢**: - `AuroraDesk.Presentation/Configuration/AppSettings.cs` - 宸茶縼绉诲埌 Infrastructure 灞? - **鏇存柊鏂囦欢**: - `AuroraDesk/AuroraDesk.csproj` - 娣诲姞瀵?AuroraDesk.Infrastructure 鐨勯」鐩紩鐢? - `AuroraDesk/App.axaml.cs` - 鏇存柊 using 璇彞浠?`AuroraDesk.Presentation.Configuration` 鏀逛负 `AuroraDesk.Infrastructure.Configuration` - **鎶€鏈粏鑺?*: - **鍛藉悕绌洪棿鏇存柊**: - `AuroraDesk.Presentation.Configuration.AppSettings` 鈫?`AuroraDesk.Infrastructure.Configuration.AppSettings` - `AuroraDesk.Presentation.Configuration.FeatureSettings` 鈫?`AuroraDesk.Infrastructure.Configuration.FeatureSettings` - **渚濊禆鍏崇郴**: - Infrastructure 灞傚凡鍖呭惈 Microsoft.Extensions.Configuration 鍖呭紩鐢? - 涓婚」鐩紙AuroraDesk锛夋坊鍔犲 Infrastructure 灞傜殑椤圭洰寮曠敤 - 閰嶇疆绫诲睘浜庡熀纭€璁炬柦灞傦紝璐熻矗璇诲彇鍜岃В鏋愬閮ㄩ厤缃? - **鏋舵瀯鍘熷垯**: - 鉁?閰嶇疆绫诲睘浜庡熀纭€璁炬柦灞傦紙Infrastructure锛夛紝涓嶄緷璧栧叾浠栧眰 - 鉁?涓婚」鐩彲浠ヤ緷璧?Infrastructure 灞備互浣跨敤閰嶇疆绫? - 鉁?閬靛惊鏁存磥鏋舵瀯鍘熷垯锛氶厤缃拰澶栭儴渚濊禆灞炰簬鍩虹璁炬柦灞?- **缂栬瘧娴嬭瘯**: - 鉁?AuroraDesk.Infrastructure 椤圭洰缂栬瘧鎴愬姛锛屾棤閿欒鏃犺鍛? - 鉁?AuroraDesk 涓婚」鐩紪璇戞垚鍔燂紝鏃犻敊璇棤璀﹀憡 - 鉁?鏁翠釜瑙e喅鏂规缂栬瘧鎴愬姛锛屾棤閿欒鏃犺鍛? - 鉁?鎵€鏈夊紩鐢ㄥ凡姝g‘鏇存柊 - **娉ㄦ剰浜嬮」**: - 閰嶇疆绫诲睘浜庡熀纭€璁炬柦灞傦紝鍥犱负瀹冭礋璐e鐞嗗閮ㄩ厤缃枃浠剁殑璇诲彇鍜岀粦瀹? - 鏍规嵁閲嶆瀯璁″垝锛孋onfiguration 鏂囦欢澶瑰簲浣嶄簬 Infrastructure 灞? - Infrastructure 灞傚凡鍖呭惈鎵€闇€鐨?Microsoft.Extensions.Configuration 鍖? ### 杩佺Щ Presentation 灞傚疄浣撳埌 Core 灞傦紙鏁存磥鏋舵瀯閲嶆瀯锛?- **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 灏嗗睘浜庨鍩熷眰鐨勫疄浣撶被浠?Presentation 灞傝縼绉诲埌 Core 灞傦紝閬靛惊鏁存磥鏋舵瀯鍘熷垯 - **淇敼鏂囦欢**: - **鏂板鏂囦欢**: - `AuroraDesk.Core/Entities/NavigationItem.cs` - 瀵艰埅椤瑰疄浣擄紙浠?Presentation 灞傝縼绉伙級 - `AuroraDesk.Core/Entities/TabItem.cs` - 鏍囩椤甸」瀹炰綋锛堜粠 Presentation 灞傝縼绉伙級 - **鍒犻櫎鏂囦欢**: - `AuroraDesk.Presentation/ViewModels/NavigationItem.cs` - 宸茶縼绉诲埌 Core 灞? - `AuroraDesk.Presentation/ViewModels/TabItem.cs` - 宸茶縼绉诲埌 Core 灞? - **鏇存柊鏂囦欢**: - `AuroraDesk.Core/AuroraDesk.Core.csproj` - 娣诲姞 ReactiveUI 鍜?HeroIcons.Avalonia 鍖呭紩鐢? - `AuroraDesk.Presentation/AuroraDesk.Presentation.csproj` - 娣诲姞瀵?AuroraDesk.Core 鐨勯」鐩紩鐢? - `AuroraDesk.Presentation/ViewModels/MainWindowViewModel.cs` - 娣诲姞 `using AuroraDesk.Core.Entities;` 寮曠敤 - **鎶€鏈粏鑺?*: - **鍛藉悕绌洪棿鏇存柊**: - `AuroraDesk.Presentation.ViewModels.NavigationItem` 鈫?`AuroraDesk.Core.Entities.NavigationItem` - `AuroraDesk.Presentation.ViewModels.TabItem` 鈫?`AuroraDesk.Core.Entities.TabItem` - **渚濊禆鍏崇郴**: - Core 灞傛坊鍔?ReactiveUI 鍖咃紙鎻愪緵 `ReactiveObject` 鍜?`IRoutableViewModel`锛? - Core 灞傛坊鍔?HeroIcons.Avalonia 鍖咃紙鎻愪緵 `IconType` 鏋氫妇锛? - Presentation 灞傛坊鍔犲 Core 灞傜殑椤圭洰寮曠敤 - **鏋舵瀯鍘熷垯**: - 鉁?Core 灞傚寘鍚鍩熷疄浣擄紝涓嶄緷璧栧叾浠栧眰 - 鉁?Presentation 灞傚彲浠ヤ緷璧?Core 灞傦紝浣嗕笉鑳藉弽鍚戜緷璧? - 鉁?瀹炰綋绫诲睘浜庨鍩熸ā鍨嬶紝搴旀斁鍦?Core 灞?- **缂栬瘧娴嬭瘯**: - 鉁?AuroraDesk.Core 椤圭洰缂栬瘧鎴愬姛锛屾棤閿欒鏃犺鍛? - 鉁?AuroraDesk.Presentation 椤圭洰缂栬瘧鎴愬姛锛屾棤閿欒鏃犺鍛? - 鉁?鎵€鏈夊紩鐢ㄥ凡姝g‘鏇存柊 - **娉ㄦ剰浜嬮」**: - Core 灞傞渶瑕?ReactiveUI 鍖呬互鏀寔 `ReactiveObject` 鍜?`IRoutableViewModel` - Core 灞傞渶瑕?HeroIcons.Avalonia 鍖呬互鏀寔 `IconType` 鏋氫妇 - 杩欎袱涓寘鏄涓夋柟搴擄紝鍦ㄩ鍩熷眰浣跨敤鏄悎鐞嗙殑锛堝洜涓哄畠浠彁渚涚殑鏄被鍨嬪畾涔夛紝鑰岄潪瀹炵幇锛? - 閬靛惊鏁存磥鏋舵瀯鍘熷垯锛氬疄浣撳拰鍊煎璞″睘浜庨鍩熷眰锛圕ore锛? ### 绗簩姝ワ細鍒涘缓 AuroraDesk.Presentation 椤圭洰骞惰縼绉绘枃浠?- **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 鍒涘缓 AuroraDesk.Presentation 椤圭洰锛屽皢琛ㄧず灞傜浉鍏虫枃浠惰縼绉诲埌鏂伴」鐩?- **淇敼鏂囦欢**: - 鏂板缓椤圭洰锛? - `AuroraDesk.Presentation/AuroraDesk.Presentation.csproj` - 鏂板缓琛ㄧず灞傞」鐩枃浠? - 杩佺Щ鏂囦欢澶瑰埌 AuroraDesk.Presentation锛? - `Resources/` - 璧勬簮鏂囦欢锛圕olors.axaml, Strings.zh-CN.axaml, Strings.en.axaml锛? - `Views/` - 鎵€鏈夎鍥炬枃浠讹紙ViewLocator.cs 鍜?Pages/ 鏂囦欢澶癸級 - `ViewModels/` - 鎵€鏈?ViewModel 鏂囦欢锛堝寘鎷?Base/ 鍜?Pages/ 鏂囦欢澶癸級 - `Services/` - 鎵€鏈夋湇鍔℃枃浠讹紙鍖呮嫭鎺ュ彛鍜屽疄鐜帮級 - `Configuration/` - 閰嶇疆绫伙紙AppSettings.cs锛? - `Attached/` - 闄勫姞灞炴€х被锛圱extEditorAssist.cs, TextMateHelper.cs锛? - `Extensions/` - 鎵╁睍鏂规硶锛圫erviceCollectionExtensions.cs锛? - `Converters/` - 杞崲鍣ㄧ被锛圫tringConverters.cs, TabStyleConverter.cs锛? - 鍛藉悕绌洪棿鏇存柊锛堟墍鏈夎縼绉荤殑鏂囦欢锛夛細 - `AuroraDesk.*` 鈫?`AuroraDesk.Presentation.*` - `AuroraDesk.ViewModels.*` 鈫?`AuroraDesk.Presentation.ViewModels.*` - `AuroraDesk.Views.*` 鈫?`AuroraDesk.Presentation.Views.*` - `AuroraDesk.Services.*` 鈫?`AuroraDesk.Presentation.Services.*` - `AuroraDesk.Configuration.*` 鈫?`AuroraDesk.Presentation.Configuration.*` - `AuroraDesk.Attached.*` 鈫?`AuroraDesk.Presentation.Attached.*` - `AuroraDesk.Extensions.*` 鈫?`AuroraDesk.Presentation.Extensions.*` - `AuroraDesk.Converters.*` 鈫?`AuroraDesk.Presentation.Converters.*` - 鏇存柊涓婚」鐩紩鐢細 - `AuroraDesk/AuroraDesk.csproj` - 娣诲姞瀵?AuroraDesk.Presentation 鐨勯」鐩紩鐢? - `AuroraDesk/AuroraDesk.sln` - 娣诲姞 AuroraDesk.Presentation 椤圭洰鍒拌В鍐虫柟妗? - `AuroraDesk/App.axaml.cs` - 鏇存柊 using 璇彞鎸囧悜鏂扮殑鍛藉悕绌洪棿 - `AuroraDesk/MainWindow.axaml.cs` - 鏇存柊 using 璇彞 - `AuroraDesk/MainWindow.axaml` - 鏇存柊鍛藉悕绌洪棿寮曠敤锛坸mlns:vm, xmlns:converters锛?- **淇敼鏂瑰紡**: - 鉁?浣跨敤 PowerShell 鍛戒护澶嶅埗鏂囦欢澶癸紙Windows 10 鐜锛? - 鉁?鎵归噺鏇存柊鍛藉悕绌洪棿澹版槑鍜?using 璇彞 - 鉁?鏇存柊椤圭洰鏂囦欢鍜岃В鍐虫柟妗堟枃浠? - 鉁?鏇存柊鎵€鏈夊紩鐢ㄦ寚鍚戞柊鐨勫懡鍚嶇┖闂?- **鎶€鏈粏鑺?*: - **椤圭洰缁撴瀯**: - 鍒涘缓 `AuroraDesk.Presentation` 椤圭洰鏂囦欢澶? - 閰嶇疆椤圭洰涓虹被搴撻」鐩紙TargetFramework: net9.0锛? - 娣诲姞蹇呰鐨?NuGet 鍖呭紩鐢紙Avalonia銆丷eactiveUI 绛夛級 - **鍛藉悕绌洪棿鏇存柊缁熻**: - ViewModels 鏂囦欢澶癸細绾?11 涓枃浠? - Views 鏂囦欢澶癸細绾?9 涓枃浠? - Services 鏂囦欢澶癸細绾?6 涓枃浠? - 鍏朵粬鏂囦欢澶癸細绾?6 涓枃浠? - 鎬昏鏇存柊鏂囦欢锛氱害 32+ 涓枃浠? - **渚濊禆鍏崇郴**: - AuroraDesk锛堜富椤圭洰锛夆啋 寮曠敤 鈫?AuroraDesk.Presentation - AuroraDesk.Presentation 涓嶄緷璧栦富椤圭洰锛堢嫭绔嬪眰锛?- **娉ㄦ剰浜嬮」**: - 鉁?鎵€鏈夋枃浠跺凡鎴愬姛杩佺Щ骞舵洿鏂板懡鍚嶇┖闂? - 鉁?椤圭洰寮曠敤宸叉纭厤缃? - 鉁?瑙e喅鏂规宸叉洿鏂板寘鍚柊椤圭洰 - 鉁?鍛藉悕绌洪棿寮曠敤宸插叏閮ㄦ洿鏂?- **鍚庣画姝ラ**: - 缂栬瘧椤圭洰楠岃瘉鎵€鏈夊紩鐢ㄦ槸鍚︽纭? - 杩愯搴旂敤绋嬪簭楠岃瘉鍔熻兘鏄惁姝e父 - 缁х画鎵ц閲嶆瀯璁″垝鐨勫悗缁楠わ紙鍒涘缓 Core銆丄pplication銆両nfrastructure 灞傦級 ### 绗簩姝ヨˉ鍏咃細娓呯悊 AuroraDesk 椤圭洰涓殑鏃ф枃浠跺す - **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 鍒犻櫎宸茶縼绉诲埌 AuroraDesk.Presentation 鐨勬棫鏂囦欢澶?- **淇敼鏂囦欢**: - 鍒犻櫎鐨勬枃浠跺す锛? - `AuroraDesk/Resources/` - 宸茶縼绉诲埌 Presentation 椤圭洰 - `AuroraDesk/Views/` - 宸茶縼绉诲埌 Presentation 椤圭洰 - `AuroraDesk/ViewModels/` - 宸茶縼绉诲埌 Presentation 椤圭洰 - `AuroraDesk/Services/` - 宸茶縼绉诲埌 Presentation 椤圭洰 - `AuroraDesk/Configuration/` - 宸茶縼绉诲埌 Presentation 椤圭洰 - `AuroraDesk/Attached/` - 宸茶縼绉诲埌 Presentation 椤圭洰 - `AuroraDesk/Extensions/` - 宸茶縼绉诲埌 Presentation 椤圭洰 - `AuroraDesk/Converters/` - 宸茶縼绉诲埌 Presentation 椤圭洰 - **鍘熷洜**: - 鉁?杩欎簺鏂囦欢澶逛腑鐨勬枃浠跺凡鍏ㄩ儴澶嶅埗鍒?AuroraDesk.Presentation 椤圭洰 - 鉁?淇濈暀鏃ф枃浠跺す浼氬鑷撮噸澶嶅畾涔夊拰鍛藉悕鍐茬獊 - 鉁?鎵€鏈夊紩鐢ㄥ凡鏇存柊涓轰娇鐢?`AuroraDesk.Presentation.*` 鍛藉悕绌洪棿 - 鉁?鏃ф枃浠朵粛浣跨敤鏃х殑 `AuroraDesk.*` 鍛藉悕绌洪棿锛屼細瀵艰嚧缂栬瘧閿欒 - **褰撳墠 AuroraDesk 椤圭洰缁撴瀯**: - `App.axaml` 鍜?`App.axaml.cs` - 搴旂敤绋嬪簭鍏ュ彛 - `MainWindow.axaml` 鍜?`MainWindow.axaml.cs` - 涓荤獥鍙? - `Program.cs` - 绋嬪簭鍏ュ彛鐐? - `appsettings.json` - 閰嶇疆鏂囦欢 - `app.manifest` - 搴旂敤绋嬪簭娓呭崟 - 鍏朵粬閰嶇疆鏂囦欢锛堣剼鏈枃浠剁瓑锛?- **娉ㄦ剰浜嬮」**: - 鉁?鎵€鏈夎〃绀哄眰鐩稿叧浠g爜宸插畬鍏ㄨ縼绉诲埌 AuroraDesk.Presentation - 鉁?AuroraDesk 涓婚」鐩幇鍦ㄥ彧鍖呭惈搴旂敤绋嬪簭鍏ュ彛鍜岄厤缃? - 鉁?椤圭洰寮曠敤鍏崇郴锛欰uroraDesk 鈫?AuroraDesk.Presentation ### 绗笁姝ワ細鍒涘缓鏁存磥鏋舵瀯鐨勫叾浠栧眰椤圭洰 - **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 鍒涘缓 Core銆丄pplication銆両nfrastructure 涓変釜鏂伴」鐩紝寤虹珛鏁存磥鏋舵瀯鍩虹缁撴瀯 - **淇敼鏂囦欢**: - 鏂板缓椤圭洰锛? - `AuroraDesk.Core/AuroraDesk.Core.csproj` - 鏍稿績棰嗗煙灞傞」鐩? - `AuroraDesk.Application/AuroraDesk.Application.csproj` - 搴旂敤灞傞」鐩? - `AuroraDesk.Infrastructure/AuroraDesk.Infrastructure.csproj` - 鍩虹璁炬柦灞傞」鐩? - 鏇存柊瑙e喅鏂规锛? - `AuroraDesk/AuroraDesk.sln` - 娣诲姞涓変釜鏂伴」鐩埌瑙e喅鏂规 - **椤圭洰渚濊禆鍏崇郴**: - **AuroraDesk.Core**: 鏃犱緷璧栵紙鏈€搴曞眰锛屽寘鍚鍩熷疄浣撳拰鎺ュ彛锛? - **AuroraDesk.Application**: 渚濊禆 `AuroraDesk.Core`锛堝簲鐢ㄦ湇鍔℃帴鍙e拰 DTOs锛? - **AuroraDesk.Infrastructure**: 渚濊禆 `AuroraDesk.Core` 鍜?`AuroraDesk.Application`锛堟湇鍔″疄鐜帮級 - **AuroraDesk.Presentation**: 渚濊禆 `AuroraDesk.Application`锛堣〃绀哄眰锛屽凡鍒涘缓锛? - **AuroraDesk**: 渚濊禆 `AuroraDesk.Presentation`锛堝簲鐢ㄧ▼搴忓叆鍙o級 - **椤圭洰閰嶇疆**: - 鎵€鏈夐」鐩洰鏍囨鏋讹細`.NET 9.0` - 鍚敤鍙┖寮曠敤绫诲瀷锛歚enable` - Infrastructure 椤圭洰鍖呭惈鍩虹鐨?Microsoft.Extensions 鍖呭紩鐢?- **褰撳墠椤圭洰缁撴瀯**: ``` AuroraDesk/ 鈹溾攢鈹€ AuroraDesk.Core/ # 鏍稿績棰嗗煙灞傦紙鏃犱緷璧栵級 鈹溾攢鈹€ AuroraDesk.Application/ # 搴旂敤灞傦紙渚濊禆 Core锛? 鈹溾攢鈹€ AuroraDesk.Infrastructure/ # 鍩虹璁炬柦灞傦紙渚濊禆 Core 鍜?Application锛? 鈹溾攢鈹€ AuroraDesk.Presentation/ # 琛ㄧず灞傦紙渚濊禆 Application锛? 鈹斺攢鈹€ AuroraDesk/ # 搴旂敤绋嬪簭鍏ュ彛锛堜緷璧?Presentation锛? ``` - **娉ㄦ剰浜嬮」**: - 鉁?鎵€鏈夐」鐩凡鍒涘缓骞舵坊鍔犲埌瑙e喅鏂规 - 鉁?椤圭洰渚濊禆鍏崇郴宸叉纭厤缃? - 鉁?瑙e喅鏂规缂栬瘧鎴愬姛锛屾棤閿欒 - 鉁?椤圭洰鏆傛椂涓虹┖椤圭洰锛岀瓑寰呭悗缁疄鐜?- **鍚庣画姝ラ**: - 鍦?Core 椤圭洰涓垱寤哄疄浣撶被鍜屾帴鍙? - 鍦?Application 椤圭洰涓垱寤烘湇鍔℃帴鍙e拰 DTOs - 鍦?Infrastructure 椤圭洰涓疄鐜版湇鍔℃帴鍙? - 杩佺Щ鐜版湁浠g爜鍒板搴斿眰 ### 绗竴姝ワ細椤圭洰閲嶅懡鍚?- MyAvaloniaApp 鈫?AuroraDesk - **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 瀹屾垚椤圭洰閲嶅懡鍚嶏紝鍖呮嫭鏂囦欢閲嶅懡鍚嶃€佸懡鍚嶇┖闂存洿鏂板拰搴旂敤鍚嶇О鏇存柊 - **淇敼鏂囦欢**: - 椤圭洰鏂囦欢锛? - `MyAvaloniaApp.csproj` 鈫?`AuroraDesk.csproj` (閲嶅懡鍚? - `MyAvaloniaApp.sln` 鈫?`AuroraDesk.sln` (閲嶅懡鍚? - 鍛藉悕绌洪棿鏇存柊锛堟墍鏈?C# 鏂囦欢锛夛細 - `Program.cs` - namespace MyAvaloniaApp 鈫?AuroraDesk - `App.axaml.cs` - namespace MyAvaloniaApp 鈫?AuroraDesk锛屾洿鏂版墍鏈?using 璇彞 - `MainWindow.axaml.cs` - namespace MyAvaloniaApp 鈫?AuroraDesk锛屾洿鏂?using 璇彞 - `Configuration\AppSettings.cs` - namespace MyAvaloniaApp.Configuration 鈫?AuroraDesk.Configuration - `Extensions\ServiceCollectionExtensions.cs` - namespace 鍜?using 璇彞鏇存柊 - `Services\*.cs` (鎵€鏈夋湇鍔℃枃浠? - namespace MyAvaloniaApp.Services 鈫?AuroraDesk.Services - `Converters\*.cs` - namespace MyAvaloniaApp.Converters 鈫?AuroraDesk.Converters - `Attached\*.cs` - namespace MyAvaloniaApp.Attached 鈫?AuroraDesk.Attached - `ViewModels\*.cs` - namespace MyAvaloniaApp.ViewModels.* 鈫?AuroraDesk.ViewModels.* - `ViewModels\Base\*.cs` - namespace MyAvaloniaApp.ViewModels.Base 鈫?AuroraDesk.ViewModels.Base - `ViewModels\Pages\*.cs` - namespace MyAvaloniaApp.ViewModels.Pages 鈫?AuroraDesk.ViewModels.Pages - `Views\*.cs` - namespace MyAvaloniaApp.Views.* 鈫?AuroraDesk.Views.* - `Views\Pages\*.cs` - namespace MyAvaloniaApp.Views.Pages 鈫?AuroraDesk.Views.Pages - 搴旂敤鍚嶇О鏇存柊锛? - `ViewModels\MainWindowViewModel.cs` - 鏍囬浠?"My Avalonia App" 鏇存柊涓?"AuroraDesk" - `Configuration\AppSettings.cs` - ApplicationName 浠?"My Avalonia App" 鏇存柊涓?"AuroraDesk" - 绀轰緥浠g爜瀛楃涓诧細 - `ViewModels\Pages\EditorPageViewModel.cs` - 绀轰緥浠g爜涓殑鍛藉悕绌洪棿瀛楃涓叉洿鏂?- **淇敼鏂瑰紡**: - 鉁?浣跨敤 PowerShell 鍛戒护閲嶅懡鍚嶉」鐩枃浠讹紙Windows 10 鐜锛? - 鉁?閫愪釜鏂囦欢淇敼鍛藉悕绌洪棿锛岄伩鍏嶆壒閲忔浛鎹㈠鑷翠贡鐮侀棶棰? - 鉁?閫愪釜鏂囦欢鏇存柊 using 璇彞 - 鉁?鏇存柊椤圭洰鏂囦欢涓殑 RootNamespace 鍜?AssemblyName - 鉁?鏇存柊瑙e喅鏂规鏂囦欢涓殑椤圭洰寮曠敤 - **鎶€鏈粏鑺?*: - **椤圭洰鏂囦欢閲嶅懡鍚?*: - 浣跨敤 PowerShell `Rename-Item` 鍛戒护閲嶅懡鍚?`.csproj` 鍜?`.sln` 鏂囦欢 - 鍦?`.csproj` 鏂囦欢涓坊鍔?`AuroraDesk` 鍜?`AuroraDesk` - 鍦?`.sln` 鏂囦欢涓洿鏂伴」鐩悕绉板拰椤圭洰鏂囦欢璺緞 - **鍛藉悕绌洪棿鏇存柊缁熻**: - 鍛藉悕绌洪棿澹版槑鏇存柊锛氱害 39 涓枃浠? - using 璇彞鏇存柊锛氱害 26 涓枃浠? - 鎬昏淇敼鏂囦欢锛氱害 40+ 涓?C# 婧愭枃浠? - **鍛藉悕绌洪棿鏄犲皠**: - `MyAvaloniaApp` 鈫?`AuroraDesk` - `MyAvaloniaApp.Configuration` 鈫?`AuroraDesk.Configuration` - `MyAvaloniaApp.Extensions` 鈫?`AuroraDesk.Extensions` - `MyAvaloniaApp.Services` 鈫?`AuroraDesk.Services` - `MyAvaloniaApp.Converters` 鈫?`AuroraDesk.Converters` - `MyAvaloniaApp.Attached` 鈫?`AuroraDesk.Attached` - `MyAvaloniaApp.ViewModels` 鈫?`AuroraDesk.ViewModels` - `MyAvaloniaApp.ViewModels.Base` 鈫?`AuroraDesk.ViewModels.Base` - `MyAvaloniaApp.ViewModels.Pages` 鈫?`AuroraDesk.ViewModels.Pages` - `MyAvaloniaApp.Views` 鈫?`AuroraDesk.Views` - `MyAvaloniaApp.Views.Pages` 鈫?`AuroraDesk.Views.Pages` - **娉ㄦ剰浜嬮」**: - 鉁?涓ユ牸閬靛畧 Windows 10 鐜瑕佹眰锛屼娇鐢?PowerShell 鑰岄潪 Linux 鍛戒护 - 鉁?涓嶄娇鐢ㄦ壒閲忔浛鎹紝閫愪釜鏂囦欢淇敼浠ラ伩鍏嶇紪鐮侀棶棰? - 鉁?姣忔淇敼鍚庨獙璇佹枃浠跺唴瀹规纭€? - 鉁?鍚屾椂鏇存柊浜嗗簲鐢ㄦ樉绀哄悕绉帮紝淇濇寔涓€鑷存€?- **鍚庣画姝ラ**: - 缂栬瘧椤圭洰楠岃瘉鎵€鏈夊懡鍚嶇┖闂存洿鏂版槸鍚︽纭? - 杩愯搴旂敤绋嬪簭楠岃瘉鍔熻兘鏄惁姝e父 - 缁х画鎵ц閲嶆瀯璁″垝鐨勫悗缁楠わ紙鏋舵瀯閲嶆瀯绛夛級 ### 鍒涘缓 AuroraDesk 閲嶆瀯璁″垝鏂囨。 - **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 鍒涘缓璇︾粏鐨勯」鐩噸鏋勮鍒掓枃妗?- **淇敼鏂囦欢**: - `AuroraDesk閲嶆瀯璁″垝.md` - 鏂板缓閲嶆瀯璁″垝鏂囨。 - **闂鎻忚堪**: - 椤圭洰闇€瑕佷粠 MyAvaloniaApp 閲嶅懡鍚嶄负 AuroraDesk - 褰撳墠椤圭洰缁撴瀯涓嶇鍚堟暣娲佹灦鏋勫師鍒? - ViewModels 鑰﹀悎鎬у己锛孧ainWindowViewModel 鐩存帴鍒涘缓鎵€鏈?PageViewModel 瀹炰緥 - 闇€瑕侀伒寰暣娲佹灦鏋勮繘琛屽垎灞傞噸鏋? - 鍛藉悕绌洪棿闇€瑕佺粺涓€涓?Aurora 鍓嶇紑 - Windows 10 鐜锛岄渶瑕侀伩鍏?Linux 璇硶瀵艰嚧涔辩爜闂 - **瑙e喅鏂规**: - 鍒涘缓浜嗗畬鏁寸殑閲嶆瀯璁″垝鏂囨。 `AuroraDesk閲嶆瀯璁″垝.md` - 瑙勫垝浜嗘暣娲佹灦鏋勫垎灞傜粨鏋勶細Core銆丄pplication銆両nfrastructure銆丳resentation - 璁捐浜?ViewModel 瑙h€︽柟妗堬細浣跨敤宸ュ巶妯″紡鍜屾湇鍔℃ā寮? - 鍒跺畾浜嗚缁嗙殑鎵ц姝ラ锛屽垎闃舵杩涜閲嶆瀯 - 寮鸿皟涓嶈鎵归噺鏇挎崲锛岄€愪釜鏂囦欢淇敼鍛藉悕绌洪棿 - 鎻愪緵浜嗕唬鐮佺ず渚嬪拰妫€鏌ユ竻鍗?- **鎶€鏈粏鑺?*: - 鏋舵瀯鍒嗗眰锛? - **Core**: 棰嗗煙瀹炰綋鍜屾帴鍙? - **Application**: 搴旂敤鏈嶅姟鎺ュ彛鍜?DTOs - **Infrastructure**: 鏈嶅姟瀹炵幇鍜岄厤缃? - **Presentation**: ViewModels銆乂iews 鍜?UI 鐩稿叧 - 瑙h€︾瓥鐣ワ細 - 寮曞叆 `IPageViewModelFactory` 鎺ュ彛鍜屽疄鐜? - 寮曞叆 `INavigationService` 鎺ュ彛鍜屽疄鐜? - 灏嗗鑸厤缃暟鎹缃? - MainWindowViewModel 涓嶅啀鐩存帴鍒涘缓 PageViewModel - 鍛藉悕绌洪棿瑙勫垝锛氭墍鏈夊懡鍚嶇┖闂翠互 `AuroraDesk` 寮€澶?- **鎵ц璁″垝**: - 闃舵涓€锛氬噯澶囧伐浣滐紙鍒嗘瀽渚濊禆鍏崇郴锛? - 闃舵浜岋細鏋舵瀯閲嶆瀯锛堝垱寤哄垎灞傜粨鏋勶級 - 闃舵涓夛細椤圭洰閲嶅懡鍚嶏紙閫愪釜鏂囦欢淇敼锛? - 闃舵鍥涳細瑙h€?ViewModels锛堥噸鐐逛紭鍖栵級 - 闃舵浜旓細娉ㄥ唽渚濊禆娉ㄥ叆 - 闃舵鍏細娴嬭瘯鍜岄獙璇?- **娉ㄦ剰浜嬮」**: - 鉂?绂佹鎵归噺鏇挎崲鍛藉悕绌洪棿 - 鉁?閫愪釜鏂囦欢淇敼骞剁紪璇戞祴璇? - 鉁?浣跨敤 Windows 璺緞鍜?PowerShell 鑴氭湰 - 鉁?姣忎釜闃舵瀹屾垚鍚庢彁浜や唬鐮?- **鐘舵€?*: 璁″垝闃舵锛岀瓑寰呭紑濮嬫墽琛? ### 瀹炵幇鑷畾涔?ViewLocator 淇璺敱瑙嗗浘瑙f瀽 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 鍒涘缓鑷畾涔?ViewLocator 瀹炵幇姝g‘鐨?ViewModel 鍒?View 鏄犲皠 - **淇敼鏂囦欢**: - `Views/ViewLocator.cs` - 鏂板缓 ViewLocator 绫? - `App.axaml.cs` - 娉ㄥ唽 ViewLocator 鍒?Splat 瀹瑰櫒 - **闂鎻忚堪**: - ReactiveUI 鐨勯粯璁?ViewLocator 鏃犳硶鏍规嵁椤圭洰鍛藉悕绾﹀畾姝g‘瑙f瀽 View - 椤圭洰浣跨敤 `XXXPageViewModel` 鈫?`XXXPageView` 鍛藉悕锛岃€岄潪鏍囧噯鐨?`XXXViewModel` 鈫?`XXXView` - 瀵艰嚧 RoutedViewHost 鏃犳硶鎵惧埌瀵瑰簲鐨?View锛屾樉绀虹┖鐧介〉闈?- **瑙e喅鏂规**: - 鍒涘缓鑷畾涔?`ViewLocator` 绫诲疄鐜?`IViewLocator` 鎺ュ彛 - 瀹炵幇 `ResolveView` 鏂规硶锛屾牴鎹?ViewModel 绫诲瀷鍔ㄦ€佹煡鎵惧搴旂殑 View - 鏀寔澶氱鍛藉悕妯″紡锛歚PageViewModel` 鈫?`PageView` 鍜?`ViewModel` 鈫?`View` - 閫氳繃 Assembly 鎵弿绫诲瀷锛屼娇鐢ㄥ懡鍚嶇┖闂存槧灏?(ViewModels 鈫?Views) - 鍦?App.axaml.cs 鐨?Initialize 鏂规硶涓敞鍐?ViewLocator 鍒?Splat 瀹瑰櫒 - **鎶€鏈粏鑺?*: ```csharp public class ViewLocator : IViewLocator { public IViewFor? ResolveView(T? viewModel, string? contract = null) { var viewModelType = viewModel.GetType(); var viewModelName = viewModelType.Name; var viewName = viewModelName .Replace("PageViewModel", "PageView") .Replace("ViewModel", "View"); var assembly = viewModelType.Assembly; var viewType = assembly.GetTypes() .FirstOrDefault(t => t.Name == viewName && t.Namespace?.Replace(".ViewModels", ".Views") == viewModelType.Namespace); return Activator.CreateInstance(viewType) as IViewFor; } } ``` ```csharp // App.axaml.cs public override void Initialize() { AvaloniaXamlLoader.Load(this); Locator.CurrentMutable.RegisterConstant(new Views.ViewLocator(), typeof(IViewLocator)); } ``` - **娴嬭瘯缁撴灉**: - 鉁?缂栬瘧鎴愬姛锛屾棤閿欒鏃犺鍛? - 鉁?ViewLocator 姝g‘娉ㄥ唽 - 鉁?瑙嗗浘瑙f瀽姝e父宸ヤ綔 ### 淇 ReactiveUI 璺敱渚濊禆娉ㄥ叆闂 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 淇 AppViewModel 渚濊禆娉ㄥ叆閰嶇疆锛岀‘淇?MainWindowViewModel 姝g‘鎺ユ敹鎵€鏈夋湇鍔′緷璧?- **淇敼鏂囦欢**: - `ViewModels/AppViewModel.cs` - 淇敼鏋勯€犲嚱鏁版帴鏀朵緷璧栨敞鍏ョ殑鏈嶅姟 - **闂鎻忚堪**: - AppViewModel 浣跨敤鏃犲弬鏋勯€犲嚱鏁版椂鐩存帴鍒涘缓 MainWindowViewModel锛屽鑷存棩蹇椼€佹暟鎹湇鍔$瓑渚濊禆涓?null - NavigationItem 涓殑 `_resourceService?.GetString(...)` 杩斿洖绌猴紝瀵艰嚧椤甸潰鏍囬鏄剧ず寮傚父 - MainWindowViewModel 鐨勪緷璧栨湇鍔℃湭姝g‘娉ㄥ叆锛屽彲鑳藉鑷村姛鑳戒笉瀹屾暣 - **瑙e喅鏂规**: - 淇敼 AppViewModel 鏋勯€犲嚱鏁帮紝鎺ユ敹 `ILogger`, `IDataService`, `IResourceService` 鍙傛暟 - DI 鑷姩娉ㄥ叆杩欎簺鏈嶅姟鍒?AppViewModel 鏋勯€犲嚱鏁? - AppViewModel 灏嗘湇鍔′紶閫掔粰 MainWindowViewModel 鐨勬瀯閫犲嚱鏁? - 纭繚鏁翠釜渚濊禆閾炬纭敞鍏ワ紝鎵€鏈夋湇鍔″彲鐢?- **鎶€鏈粏鑺?*: ```csharp public AppViewModel( ILogger? logger = null, IDataService? dataService = null, IResourceService? resourceService = null) { Router = new RoutingState(); // 浣跨敤渚濊禆娉ㄥ叆鍒涘缓 MainWindowViewModel锛屼紶鍏ユ墍鏈変緷璧? MainWindowViewModel = new MainWindowViewModel(this, logger, dataService, resourceService); } ``` - **娴嬭瘯缁撴灉**: - 鉁?缂栬瘧鎴愬姛锛屾棤閿欒鏃犺鍛? - 鉁?DI 姝g‘娉ㄥ叆鎵€鏈変緷璧栨湇鍔? - 鉁?MainWindowViewModel 姝e父宸ヤ綔 ### 瀹屾暣瀹炵幇 ReactiveUI 璺敱绯荤粺 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 瀹屽叏閲嶆瀯涓轰娇鐢?ReactiveUI 璺敱绯荤粺锛岀鍚?Avalonia.ReactiveUI 鏈€浣冲疄璺?- **淇敼鏂囦欢**: - `ViewModels/Base/RoutableViewModel.cs` - 鏂板缓鍙矾鐢?ViewModel 鍩虹被 - `ViewModels/Pages/*.cs` - 鎵€鏈夐〉闈?ViewModel 鏀归€犱负缁ф壙 RoutableViewModel - `Views/Pages/*PageView.axaml` - 鎵€鏈夐〉闈?View XAML 鏍瑰厓绱犳敼涓?reactive:ReactiveUserControl - `Views/Pages/*PageView.axaml.cs` - 鎵€鏈夐〉闈?View 鏀逛负缁ф壙 ReactiveUserControl锛屾墜鍔ㄥ疄鐜?InitializeComponent - `ViewModels/NavigationItem.cs` - 鏀逛负瀛樺偍 ViewModel 鑰岄潪 View 瀹炰緥 - `ViewModels/TabItem.cs` - 鏀逛负瀛樺偍 ViewModel 鑰岄潪 View 瀹炰緥 - `ViewModels/MainWindowViewModel.cs` - 瀹屽叏閲嶆瀯锛屼娇鐢?Router.Navigate.Execute 瀵艰埅 - `MainWindow.axaml` - 浣跨敤 RoutedViewHost 鏇挎崲 ContentPresenter - `ViewModels/AppViewModel.cs` - 閲嶆瀯涓烘棤鍙傛瀯閫犲嚱鏁帮紝鍐呴儴绠$悊渚濊禆 - `Extensions/ServiceCollectionExtensions.cs` - 绉婚櫎閲嶅鐨?MainWindowViewModel 娉ㄥ唽 - **鎶€鏈疄鐜?*: - **璺敱鍩虹被**: 鍒涘缓 `RoutableViewModel` 鍩虹被瀹炵幇 `IRoutableViewModel` 鎺ュ彛 - **ViewModel 璺敱鍖?*: 鎵€鏈夐〉闈?ViewModel 缁ф壙 `RoutableViewModel` 骞舵敞鍏?`IScreen` - **View 璺敱鍖?*: 鎵€鏈夐〉闈?View 缁ф壙 `ReactiveUserControl`锛屽疄鐜扮被鍨嬪畨鍏ㄧ殑瑙嗗浘瑙f瀽 - **鏁版嵁妯″瀷鏇存柊**: NavigationItem 鍜?TabItem 鏀逛负瀛樺偍 `IRoutableViewModel` - **瀵艰埅閲嶆瀯**: MainWindowViewModel 浣跨敤 `Router.Navigate.Execute(viewModel)` 杩涜瀵艰埅 - **UI 缁戝畾**: MainWindow.axaml 浣跨敤 `` 鏄剧ず璺敱鍐呭 - **鐘舵€佸悓姝?*: 鐩戝惉 `Router.CurrentViewModel` 鑷姩鍒涘缓/鏇存柊鏍囩椤? - **瑙嗗浘瑙f瀽**: ReactiveUserControl 鏀寔鑷姩瑙嗗浘瑙f瀽锛屾棤闇€鎵嬪姩鏄犲皠 - **鎶€鏈粏鑺?*: - `RoutableViewModel` 鎻愪緵 `UrlPathSegment` 鍜?`HostScreen` 灞炴€? - 鎵€鏈夐〉闈?ViewModel 鏋勯€犲嚱鏁版帴鏀?`IScreen` 鍙傛暟 - `MainWindowViewModel` 鏆撮湶 `Router` 灞炴€х粰 UI 缁戝畾 - 瀵艰埅椤瑰拰鏍囩椤甸兘瀛樺偍 ViewModel 寮曠敤锛屾敮鎸佽矾鐢卞鑸? - `Router.CurrentViewModel` 鍙樺寲鏃惰嚜鍔ㄥ悓姝ユ爣绛鹃〉鐘舵€? - 鍒濆鏃惰嚜鍔ㄥ鑸埌浠〃鏉块〉闈?- **娴嬭瘯缁撴灉**: - 鉁?缂栬瘧鎴愬姛锛屾棤閿欒鏃犺鍛? - 鉁?鎵€鏈?ViewModel 姝g‘瀹炵幇 `IRoutableViewModel` - 鉁?渚濊禆娉ㄥ叆閰嶇疆姝g‘ - 鉁?RoutedViewHost 姝g‘缁戝畾 Router - 鉁?璺敱瀵艰埅鍔熻兘瀹屾暣 - **鏋舵瀯鐗圭偣**: - **瀹屽叏绗﹀悎 ReactiveUI 鏍囧噯**: 浣跨敤 Router.Navigate.Execute 鍜?RoutedViewHost - **鏍囩椤典笌璺敱鍚屾**: Tab 绠$悊鑷姩涓?Router.CurrentViewModel 鍚屾 - **瀵艰埅鍘嗗彶鏀寔**: 搴曞眰 Router 鏀寔鍓嶈繘/鍚庨€€鍘嗗彶绠$悊 - **URL 璺敱灏辩华**: 鎵€鏈?ViewModel 鍏峰 UrlPathSegment锛屾敮鎸?URL 璺敱鎵╁睍 - **鐢熷懡鍛ㄦ湡绠$悊**: Router 鑷姩绠$悊 ViewModel 鐢熷懡鍛ㄦ湡 - **浼樺娍**: - 鉁?瀹屽叏绗﹀悎 ReactiveUI 鏈€浣冲疄璺? - 鉁?鏀寔瀵艰埅鍘嗗彶绠$悊锛圧outer 鍐呯疆锛? - 鉁?鏀寔 URL/璺敱鍙傛暟鎵╁睍 - 鉁?鏇村ソ鐨勬祴璇曟€э紙Router 鍙ā鎷燂級 - 鉁?鏉捐€﹀悎鏋舵瀯锛圴iewModel 涓?View 瑙h€︼級 - 鉁?绫诲瀷瀹夊叏锛堢紪璇戞湡妫€鏌ワ級 - 鉁?鑷姩瑙嗗浘瑙f瀽锛圧outedViewHost锛? ### Avalonia.ReactiveUI 鏋舵瀯妫€鏌ユ姤鍛婏紙宸蹭紭鍖栵級 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **妫€鏌ュ唴瀹?*: 妫€鏌ラ」鐩槸鍚﹂伒寰?Avalonia.ReactiveUI 鏈€浣冲疄璺碉紝鐗瑰埆鏄?NavigationItem 瀵艰埅璺敱瀹炵幇 - **妫€鏌ョ粨鏋?*: - 鉁?**姝g‘浣跨敤**: - `NavigationItem` 缁ф壙鑷?`ReactiveObject`锛屼娇鐢ㄤ簡 `RaiseAndSetIfChanged` - `MainWindowViewModel` 缁ф壙鑷?`ReactiveObject`锛屾纭娇鐢ㄤ簡 `ReactiveCommand` - 鎵€鏈夐〉闈?ViewModel 閮界户鎵胯嚜 `ReactiveObject` - `MainWindow` 缁ф壙鑷?`ReactiveWindow`锛岀鍚?ReactiveWindow 妯″紡 - `AppViewModel` 瀹炵幇浜?`IScreen` 鎺ュ彛骞舵彁渚涗簡 `RoutingState` - 浣跨敤浜?`WhenAnyValue` 鍜?`Subscribe` 瀹炵幇鍝嶅簲寮忕洃鍚? - 鈿狅笍 **鏈畬鍏ㄩ噰鐢?ReactiveUI 璺敱**: - **闂**: 椤圭洰铏芥湁 `RoutingState`锛屼絾鏈娇鐢?ReactiveUI 鐨勮矾鐢辨満鍒? - **鐜扮姸**: NavigationItem 鐩存帴灏?View 瀹炰緥瀛樺偍鍦?`Content` 灞炴€т腑锛屼娇鐢ㄦ墜鍔ㄥ垱寤烘爣绛鹃〉鐨勬柟寮忓鑸? - **瀹炵幇鏂瑰紡**: 鍦?`InitializeNavigationItems` 涓洿鎺ュ疄渚嬪寲 View锛? ```csharp Content = new Views.Pages.DashboardPageView { DataContext = new Pages.DashboardPageViewModel() } ``` - **璺敱绯荤粺**: `AppViewModel.Router` 宸插垱寤轰絾浠庢湭浣跨敤 - **椤甸潰 ViewModel**: 鎵€鏈夐〉闈?ViewModel 鏈疄鐜?`IRoutableViewModel`锛屾湭缁ф壙 `ReactiveObject, IRoutableViewModel` - 馃搵 **鏋舵瀯璇勪及**: - **褰撳墠瀹炵幇**: 鑷畾涔夊鑸紙绫讳技浜庝紶缁?TabControl锛? - **璺敱绯荤粺**: 鏈?`RoutingState` 浣嗘湭瀹為檯浣跨敤 - **閫傜敤鎬?*: 瀵逛簬 Tab 鏍峰紡鐨勫椤甸潰搴旂敤锛屽綋鍓嶅疄鐜版槸鍙帴鍙楃殑 - **ReactiveUI 璺敱浼樺娍**: - 鏀寔瀵艰埅鏍堝巻鍙茬鐞嗭紙鍓嶈繘/鍚庨€€锛? - URL/璺敱鍙傛暟鏀寔 - 鏇村ソ鐨勬祴璇曟€? - 绗﹀悎 ReactiveUI 瀹樻柟鎺ㄨ崘妯″紡 - 馃挕 **鏀硅繘寤鸿**: - **閫夐」1**: 淇濇寔褰撳墠瀹炵幇 - 浼樼偣: 绠€鍗曠洿鎺ワ紝閫傚悎 Tab 寮忕晫闈紝鏃犻渶淇敼 - 缂虹偣: 涓嶅埄鐢?ReactiveUI 璺敱鑳藉姏 - **閫夐」2**: 鏀归€犱负 ReactiveUI 璺敱 - 璁╅〉闈?ViewModel 瀹炵幇 `IRoutableViewModel` - 浣跨敤 `Router.Navigate.Execute(viewModel)` 瀵艰埅 - 浣跨敤 `RoutedViewHost` 鏄剧ず鍐呭 - 浼樼偣: 绗﹀悎 ReactiveUI 鏈€浣冲疄璺碉紝鏀寔瀵艰埅鍘嗗彶 - 缂虹偣: 闇€瑕侀噸鏋勭幇鏈夊鑸€昏緫锛孴ab 寮忕晫闈㈤渶瑕佽嚜瀹氫箟瀹炵幇 - **缁撹**: - NavigationItem 褰撳墠瀹炵幇**鍚堢悊**锛屼絾**鏈厖鍒嗗埄鐢?* ReactiveUI 璺敱鑳藉姏 - 瀵逛簬澶嶆潅鐨勫 Tab 搴旂敤锛屽彲浠ヤ娇鐢ㄨ嚜瀹氫箟瀵艰埅 + ReactiveUI 鍝嶅簲寮忕壒鎬э紙褰撳墠鏂瑰紡锛? - 濡傛灉鏈潵闇€瑕佸鑸巻鍙层€乁RL 璺敱绛夊姛鑳斤紝寤鸿鏀归€犱负瀹屾暣鐨?ReactiveUI 璺敱绯荤粺 - **鎺ㄨ崘**: - 瀵逛簬褰撳墠椤圭洰锛?*淇濇寔鐜版湁瀹炵幇**鏄悎鐞嗙殑 - 寤鸿澧炲姞娉ㄩ噴璇存槑涓轰綍閫夋嫨鑷畾涔夊鑸€岄潪鏍囧噯 ReactiveUI 璺敱 - 濡傛湭鏉ラ渶瑕侊紝鍙皢 Router 鐪熸鎺ュ叆瀵艰埅绯荤粺 ## 2025骞翠慨鏀硅褰? ### 鏁村悎 AppViewModel 骞跺畬鍠?ReactiveWindow 鏋舵瀯 - **鏃ユ湡**: 2025骞?0鏈?1鏃?- **淇敼鍐呭**: 涓荤獥鍙f敼鐢?ReactiveWindow锛屽苟閫氳繃 AppViewModel 鎻愪緵涓昏鍥炬ā鍨嬶紝瀹屽杽渚濊禆娉ㄥ叆閰嶇疆浠ョ鍚?Avalonia.ReactiveUI 妯″紡 - **淇敼鏂囦欢**: - MainWindow.axaml - MainWindow.axaml.cs - ViewModels/AppViewModel.cs - Extensions/ServiceCollectionExtensions.cs - **瑙e喅鏂规**: - MainWindow 缁ф壙 ReactiveWindow锛屽苟灏?DataContext 缁戝畾鍒?AppViewModel.MainWindowViewModel锛屼繚鐣欏師鏈夌粦瀹氱粨鏋? - 鍦?AppViewModel 涓敞鍏?MainWindowViewModel锛岄泦涓鐞嗚矾鐢辩姸鎬佸拰鏍硅鍥炬ā鍨? - 璋冩暣鏈嶅姟娉ㄥ唽鏂瑰紡锛岀‘淇?AppViewModel 涓?MainWindowViewModel 浠ュ崟渚嬪舰寮忓嚭鐜板湪 DI 瀹瑰櫒涓紝骞堕€氳繃 IScreen 瀵瑰鏆撮湶 - 鎵嬪姩瀹炵幇 InitializeComponent 浠ュ吋瀹?ReactiveWindow 鐨勫垵濮嬪寲娴佺▼ - **娴嬭瘯缁撴灉**: - `dotnet build`锛?025-10-31锛夐€氳繃 ### 閲嶆瀯 EditorPageView 浠ョ洿鎺ヤ娇鐢?AvaloniaEdit.TextMate - **鏃ユ湡**: 2025骞?0鏈?1鏃?- **淇敼鍐呭**: 绉婚櫎鏃х殑 BindableTextEditor锛岃嚜瀹氫箟闄勫姞灞炴€у疄鐜?MVVM 缁戝畾锛屽苟閫氳繃 TextMateHelper 缁熶竴璇硶楂樹寒閫昏緫 - **淇敼鏂囦欢**: - Views/Pages/EditorPageView.axaml - Views/Pages/EditorPageView.axaml.cs - ViewModels/Pages/EditorPageViewModel.cs - Attached/TextEditorAssist.cs锛堟柊寤猴級 - Attached/TextMateHelper.cs锛堟柊寤猴級 - Views/Controls/BindableTextEditor.cs锛堝垹闄わ級 - **瑙e喅鏂规**: - 閫氳繃 TextEditorAssist 闄勫姞灞炴€у皢 TextDocument 涓?TextEditor 鍚屾锛屽疄鐜版棤浠g爜闅愯棌鐨?Document 缁戝畾 - 浣跨敤 TextMateHelper 闄勫姞灞炴€у皝瑁呰娉曢珮浜畨瑁呬笌璇█鍒囨崲閫昏緫 - ViewModel 淇濈暀 TextDocument 骞跺湪璇█鍒囨崲鏃跺埛鏂版枃鏈唴瀹? - XAML 涓洿鎺ュ紩鐢?AvaloniaEdit.TextEditor锛岄伩鍏嶅啑浣欒嚜瀹氫箟鎺т欢 - **浼樺娍**: - 瀹屽叏绗﹀悎 MVVM 妯″紡锛岃鍥惧眰浠呴€氳繃缁戝畾涓庨檮鍔犲睘鎬у畬鎴愰厤缃? - TextMate 鍒濆鍖栦笌璇█鍒囨崲缁熶竴灏佽锛屽彲澶嶇敤鎵╁睍 - 浠g爜缁撴瀯娓呮櫚锛屽噺灏戦噸澶嶅瓧绗︿覆鐘舵€佸悓姝?- **娴嬭瘯缁撴灉**: - 鎵嬪姩楠岃瘉锛氬垏鎹㈣瑷€鍙甯稿埛鏂拌娉曢珮浜? - TextDocument 鍐呭涓庣紪杈戝櫒淇濇寔鍚屾锛屾棤棰濆鍒锋柊寤惰繜 - **琛ュ厖**: - 璋冩暣 TextEditorAssist 闄勫姞灞炴€э紝浣跨敤 AddClassHandler 瀹炵幇鍙屽悜鍚屾骞堕伩鍏嶇紪璇戦敊璇? - TextMateHelper 鏀逛负鎸?scope 鍚嶇О璁剧疆璇硶锛屽吋瀹?TextMate API 绛惧悕 ### 瀹炵幇 MVVM 鏂瑰紡鐨?TextEditor Document 缁戝畾 - **鏃ユ湡**: 2025骞?鏈?鏃?- **淇敼鍐呭**: 鍒涘缓鑷畾涔?BindableTextEditor 鎺т欢锛屽疄鐜扮函 MVVM 缁戝畾鏂瑰紡 - **淇敼鏂囦欢**: - Views/Controls/BindableTextEditor.cs - 鏂板缓鏀寔 MVVM 缁戝畾鐨勮嚜瀹氫箟鎺т欢 - Views/Pages/EditorPageView.axaml - 浣跨敤 BindableTextEditor 骞剁粦瀹?Document - Views/Pages/EditorPageView.axaml.cs - 绉婚櫎鎵嬪姩璁剧疆 Document 鐨勪唬鐮侊紝鏀圭敤绾粦瀹?- **瑙e喅鏂规**: - 鍒涘缓 BindableTextEditor 缁ф壙鑷?TextEditor - 瀹氫箟 BindableDocument StyledProperty锛屾敮鎸佸弻鍚戠粦瀹? - 瀹炵幇鍙屽悜鍚屾锛欱indableDocument 鈫?TextEditor.Document - 浣跨敤鏍囧織浣嶉槻姝㈠惊鐜洿鏂? - 鍦?XAML 涓娇鐢?`BindableDocument="{Binding Document}"` 瀹炵幇 MVVM 缁戝畾 - 绉婚櫎浜嗘墍鏈夋墜鍔ㄨ缃?Document 鐨勪唬鐮?- **鎶€鏈粏鑺?*: - 浣跨敤 StyledProperty 瀹氫箟鍙粦瀹氬睘鎬? - 浣跨敤 GetObservable 鐩戝惉灞炴€у彉鍖? - 浣跨敤鏍囧織浣?(_isUpdatingFromBindable, _isUpdatingFromDocument) 闃叉寰幆鏇存柊 - 鏀寔鍙屽悜缁戝畾 (BindingMode.TwoWay) - **浼樺娍**: - 瀹屽叏绗﹀悎 MVVM 妯″紡 - 浠g爜鏇寸畝娲侊紝View 灞備笉闇€瑕佹墜鍔ㄨ缃? - 鑷姩鍙屽悜鍚屾锛孷iewModel 鍙樺寲鏃惰嚜鍔ㄦ洿鏂?UI - **娴嬭瘯缁撴灉**: - 绛夊緟鐢ㄦ埛娴嬭瘯楠岃瘉 ### 淇 TextEditor Document 鏄剧ず闂锛堢浜屾淇锛?- **鏃ユ湡**: 2025骞?鏈?鏃?- **淇敼鍐呭**: 淇 TextEditor 鎺т欢涓嶆樉绀哄唴瀹圭殑闂锛屾敼鐢ㄤ唬鐮佸悗鍙版墜鍔ㄨ缃?Document - **淇敼鏂囦欢**: - Views/Pages/EditorPageView.axaml - 绉婚櫎浜?Document 鐨?XAML 缁戝畾 - Views/Pages/EditorPageView.axaml.cs - 鍦ㄤ唬鐮佸悗鍙版墜鍔ㄨ缃?Document - App.axaml - 娣诲姞 AvaloniaEdit 鏍峰紡寮曠敤 - **闂鎻忚堪**: - TextEditor 鐨?Document 缁戝畾鍦?XAML 涓笉璧蜂綔鐢紝缂栬緫鍣ㄤ粛鏄剧ず绌虹櫧 - **瑙e喅鏂规**: - 绉婚櫎 XAML 涓殑 `Document="{Binding Document}"` 缁戝畾 - 鍦ㄤ唬鐮佸悗鍙扮殑澶氫釜浣嶇疆鎵嬪姩璁剧疆 `editor.Document = viewModel.Document` - 娣诲姞 Loaded 浜嬩欢澶勭悊锛屽湪鎺т欢鍔犺浇瀹屾垚鍚庤缃?Document - 鍦?OnDataContextChanged 鍜?InitializeTextMate 涓兘璁剧疆 Document - 鍒涘缓 UpdateDocument() 鏂规硶缁熶竴澶勭悊 Document 鏇存柊 - 鐩戝惉 Document 灞炴€у彉鍖栵紝纭繚鍚屾鏇存柊 - 鍦?App.axaml 涓坊鍔?AvaloniaEdit 鏍峰紡寮曠敤 - **鎶€鏈粏鑺?*: - AvaloniaEdit 鐨?Document 灞炴€у彲鑳戒笉瀹屽叏鏀寔鏁版嵁缁戝畾锛岄渶瑕佸湪浠g爜鍚庡彴鎵嬪姩璁剧疆 - 浣跨敤澶氫釜鏃舵満纭繚 Document 璁剧疆锛歀oaded 浜嬩欢銆丏ataContextChanged銆両nitializeTextMate - 浣跨敤 DispatcherPriority.Loaded 纭繚鍦ㄦ帶浠跺畬鍏ㄥ姞杞藉悗鍐嶈缃? - 娣诲姞鏍峰紡寮曠敤纭繚鎺т欢姝g‘娓叉煋 - **娴嬭瘯缁撴灉**: - 绛夊緟鐢ㄦ埛娴嬭瘯楠岃瘉 ### 淇 TextEditor Document 缁戝畾闂 - **鏃ユ湡**: 2025骞?鏈?鏃?- **淇敼鍐呭**: 淇 EditorPageViewModel 涓?Document 灞炴€х粦瀹氫负 null 鐨勯棶棰?- **淇敼鏂囦欢**: - ViewModels/Pages/EditorPageViewModel.cs - 纭繚 Document 灞炴€у湪鍒濆鍖栨椂灏辨湁鍊?- **闂鎻忚堪**: - TextEditor 鐨?Document 缁戝畾鍦ㄥ垵濮嬪寲鏃朵负 null锛屽鑷寸紪杈戝櫒鏃犳硶鏄剧ず鍐呭 - **瑙e喅鏂规**: - 灏?Document 灞炴€т粠鍙┖绫诲瀷锛圱extDocument?锛夋敼涓洪潪绌虹被鍨嬶紙TextDocument锛? - 鍦ㄦ瀯閫犲嚱鏁颁腑绔嬪嵆鍒濆鍖?Document锛岀‘淇濈粦瀹氭椂鏈夊€? - 淇敼 InitializeDefaultCode() 鏂规硶锛岀洿鎺ヨ缃?Document.Text 鑰屼笉鏄垱寤烘柊鐨?Document 瀹炰緥 - 绉婚櫎浜嗘墍鏈?Document 鐨勭┖鍊兼鏌ワ紝鍥犱负鐜板湪瀹冧繚璇佷笉涓?null - **鎶€鏈粏鑺?*: - 鍦ㄦ瀯閫犲嚱鏁板紑濮嬪绔嬪嵆鍒涘缓 TextDocument 瀹炰緥 - 浣跨敤 Document.Text 灞炴€ф洿鏂板唴瀹癸紝鑰屼笉鏄浛鎹㈡暣涓?Document 瀵硅薄 - 杩欐牱鍙互淇濇寔缁戝畾鍏崇郴鐨勮繛缁€?- **娴嬭瘯缁撴灉**: - Document 缁戝畾鎴愬姛锛屼絾缂栬緫鍣ㄤ粛涓嶆樉绀哄唴瀹癸紝闇€瑕佽繘涓€姝ヤ慨澶? ## 2024骞翠慨鏀硅褰? ### WSL Ubuntu鍙戝竷閰嶇疆 - **鏃ユ湡**: 2024骞?- **淇敼鍐呭**: 閰嶇疆Avalonia搴旂敤鏀寔鍙戝竷鍒癢SL Ubuntu鐜 - **淇敼鏂囦欢**: - `MyAvaloniaApp.csproj` - 娣诲姞Linux鍙戝竷閰嶇疆 - `publish-linux.bat` - Windows鎵瑰鐞嗗彂甯冭剼鏈? - `publish-linux.ps1` - PowerShell鍙戝竷鑴氭湰 - `WSL閮ㄧ讲璇存槑.md` - 璇︾粏鐨勯儴缃茶鏄庢枃妗?- **璇存槑**: - 淇敼椤圭洰鏂囦欢鏀寔Linux x64骞冲彴鍙戝竷 - 鍒涘缓鑷姩鍖栧彂甯冭剼鏈? - 鐢熸垚鑷寘鍚殑Linux鍙墽琛屾枃浠? - 鎻愪緵瀹屾暣鐨刉SL閮ㄧ讲鎸囧崡 - **椤圭洰淇℃伅**: - 椤圭洰鍚嶇О: MyAvaloniaApp - 鐩爣妗嗘灦: .NET 9.0 - 鏀寔骞冲彴: Windows, Linux x64 - 鍙戝竷绫诲瀷: 鑷寘鍚彂甯?- **鍙戝竷鍛戒护**: `dotnet publish -c Release -r linux-x64 --self-contained true -o "publish\linux-x64"` - **鍙戝竷浣嶇疆**: `publish\linux-x64\` - **涓绘墽琛屾枃浠?*: `MyAvaloniaApp` (Linux鍙墽琛屾枃浠? ### 淇鑴氭湰涓枃涔辩爜闂 - **鏃ユ湡**: 2024骞?- **淇敼鍐呭**: 淇鍙戝竷鑴氭湰鐨勪腑鏂囦贡鐮侀棶棰?- **淇敼鏂囦欢**: - `publish-linux.bat` - 娣诲姞UTF-8缂栫爜鏀寔锛屾敼涓鸿嫳鏂囪緭鍑? - `publish-linux.ps1` - 璁剧疆UTF-8缂栫爜锛屾敼涓鸿嫳鏂囪緭鍑?- **璇存槑**: - 鎵瑰鐞嗘枃浠舵坊鍔?`chcp 65001` 璁剧疆UTF-8缂栫爜 - PowerShell鏂囦欢璁剧疆 `[Console]::OutputEncoding = [System.Text.Encoding]::UTF8` - 灏嗘墍鏈変腑鏂囪緭鍑烘敼涓鸿嫳鏂囷紝閬垮厤缂栫爜闂 - 淇濇寔鑴氭湰鍔熻兘涓嶅彉锛屼粎淇敼鏄剧ず鏂囨湰 ### 瑙e喅WSL Ubuntu渚濊禆闂 - **鏃ユ湡**: 2024骞?- **淇敼鍐呭**: 瑙e喅Avalonia搴旂敤鍦╓SL Ubuntu涓殑libICE.so.6缂哄け闂 - **淇敼鏂囦欢**: - `install-ubuntu-deps.sh` - Ubuntu渚濊禆瀹夎鑴氭湰 - `install-wsl-deps.bat` - Windows鎵瑰鐞嗚剼鏈紝鐢ㄤ簬鍦╓SL涓畨瑁呬緷璧? - `WSL閮ㄧ讲璇存槑.md` - 鏇存柊閮ㄧ讲璇存槑锛屾坊鍔犱緷璧栧畨瑁呭拰闂瑙e喅鏂规 - **璇存槑**: - 鍒涘缓浜嗗畬鏁寸殑X11搴撲緷璧栧畨瑁呰剼鏈? - 鍖呭惈libICE銆乴ibSM銆乴ibX11绛夊繀闇€鐨勫浘褰㈢晫闈㈠簱 - 鎻愪緵鑷姩鍜屾墜鍔ㄤ袱绉嶅畨瑁呮柟寮? - 娣诲姞浜嗚缁嗙殑甯歌闂瑙e喅鏂规 - **闂**: `System.DllNotFoundException: Unable to load shared library 'libICE.so.6'` - **瑙e喅鏂规**: 瀹夎X11鐩稿叧绯荤粺搴擄紝鏀寔Avalonia鍥惧舰鐣岄潰鏄剧ず ### 瀹屽杽 Program.cs 浣跨敤 HostBuilder + ReactiveUI 鏋舵瀯 - **鏃ユ湡**: 2024骞?- **淇敼鍐呭**: 灏嗗簲鐢ㄧ▼搴忔敼閫犱负浣跨敤鐜颁唬 .NET HostBuilder + ReactiveUI 鏋舵瀯 - **淇敼鏂囦欢**: - `MyAvaloniaApp.csproj` - 娣诲姞 HostBuilder 鐩稿叧 NuGet 鍖? - `Program.cs` - 瀹屽叏閲嶆瀯锛屼娇鐢?HostBuilder 妯″紡 - `App.axaml.cs` - 娣诲姞渚濊禆娉ㄥ叆鏀寔 - `MainWindow.axaml.cs` - 鏀归€犱负 ReactiveWindow锛屾敮鎸?ReactiveUI - `MainWindow.axaml` - 鏇存柊 UI 甯冨眬锛屾坊鍔犲搷搴斿紡缁戝畾 - `ViewModels/AppViewModel.cs` - 鏂板缓搴旂敤绋嬪簭绾?ViewModel - `ViewModels/MainWindowViewModel.cs` - 鏂板缓涓荤獥鍙?ViewModel - `Services/IDataService.cs` - 鏂板缓鏁版嵁鏈嶅姟鎺ュ彛 - `Services/DataService.cs` - 鏂板缓鏁版嵁鏈嶅姟瀹炵幇 - `Services/IApiService.cs` - 鏂板缓 API 鏈嶅姟鎺ュ彛 - `Services/ApiService.cs` - 鏂板缓 API 鏈嶅姟瀹炵幇 - `Extensions/ServiceCollectionExtensions.cs` - 鏂板缓鏈嶅姟娉ㄥ唽鎵╁睍鏂规硶 - `Configuration/AppSettings.cs` - 鏂板缓搴旂敤绋嬪簭閰嶇疆绫? - `appsettings.json` - 鏂板缓閰嶇疆鏂囦欢 - **鏂板鍔熻兘**: - 渚濊禆娉ㄥ叆瀹瑰櫒闆嗘垚 - 閰嶇疆绠$悊绯荤粺 - 缁撴瀯鍖栨棩蹇楃郴缁? - 鍝嶅簲寮忕紪绋嬫敮鎸? - 鏈嶅姟鐢熷懡鍛ㄦ湡绠$悊 - 鐜妫€娴嬪拰楠岃瘉 - **鏋舵瀯鐗规€?*: - 浣跨敤 Microsoft.Extensions.Hosting - 闆嗘垚 ReactiveUI 妗嗘灦 - 鏀寔閰嶇疆鏂囦欢鐑噸杞? - 瀹屾暣鐨勬棩蹇楄褰? - 鏈嶅姟娉ㄥ唽鍜岃В鏋? - 鍝嶅簲寮忔暟鎹粦瀹?- **鎶€鏈爤**: - .NET 9.0 - Avalonia 11.3.7 - ReactiveUI 11.3.7 - Microsoft.Extensions.* 9.0.0 - **璇存槑**: - 灏嗕紶缁熺殑 Avalonia 搴旂敤绋嬪簭鏀归€犱负鐜颁唬鏋舵瀯 - 鎻愪緵鏇村ソ鐨勫彲娴嬭瘯鎬у拰鍙淮鎶ゆ€? - 鏀寔渚濊禆娉ㄥ叆鍜岄厤缃鐞? - 闆嗘垚鍝嶅簲寮忕紪绋嬫ā寮? - 涓哄悗缁姛鑳芥墿灞曞瀹氬熀纭€ ### 淇 HostBuilder 骞冲彴鍏煎鎬ч棶棰?- **鏃ユ湡**: 2024骞?- **淇敼鍐呭**: 瑙e喅 HostBuilder 鍦?Windows 骞冲彴涓婄殑鍏煎鎬ч棶棰?- **闂**: "Operation is not supported on this platform" 閿欒 - **淇敼鏂囦欢**: - `Program.cs` - 绠€鍖?HostBuilder 閰嶇疆锛岀Щ闄や笉鍏煎鐨勯€夐」 - `MainWindow.axaml.cs` - 鏆傛椂绠€鍖栦负涓荤獥鍙o紝绉婚櫎澶嶆潅鐨?ReactiveUI 缁戝畾 - `MainWindow.axaml` - 绠€鍖栦负鍩烘湰鐨?UI 甯冨眬 - **瑙e喅鏂规**: - 绉婚櫎 `UseDefaultServiceProvider` 閰嶇疆 - 绉婚櫎 `AddEventSourceLogger` 鏃ュ織鎻愪緵绋嬪簭 - 绠€鍖栨湇鍔℃敞鍐屽拰閰嶇疆 - 娣诲姞寮傚父澶勭悊鍜屽洖閫€鏈哄埗 - **娴嬭瘯缁撴灉**: - 鍩烘湰 Avalonia 搴旂敤绋嬪簭鍙互姝e父杩愯 - HostBuilder 闆嗘垚闇€瑕佽繘涓€姝ヤ紭鍖? - ReactiveUI 缁戝畾闇€瑕侀€愭娣诲姞 - **璇存槑**: - 璇嗗埆骞惰В鍐充簡骞冲彴鍏煎鎬ч棶棰? - 寤虹珛浜嗙ǔ瀹氱殑鍩虹鏋舵瀯 - 涓哄悗缁姛鑳芥墿灞曟彁渚涗簡鍙潬鐨勮捣鐐? ### 瀹屾垚 Avalonia + ReactiveUI + HostBuilder 闆嗘垚 - **鏃ユ湡**: 2024骞?- **淇敼鍐呭**: 瀹屾垚 Avalonia + ReactiveUI + HostBuilder 鐨勫畬鏁撮泦鎴愶紝浣跨敤鏈€鏂扮殑 .NET 9 - **淇敼鏂囦欢**: - `Program.cs` - 閲嶆瀯涓轰娇鐢?HostBuilder 妯″紡锛屾敮鎸佷緷璧栨敞鍏ュ拰閰嶇疆绠$悊 - `App.axaml.cs` - 娣诲姞鏈嶅姟鎻愪緵绋嬪簭鏀寔锛屼繚鎸佹棤鍙傛瀯閫犲嚱鏁板吋瀹规€? - `MainWindow.axaml.cs` - 鏀归€犱负鏀寔渚濊禆娉ㄥ叆鐨勬瀯閫犲嚱鏁帮紝闆嗘垚 ViewModel - `MainWindow.axaml` - 瀹屽叏閲嶆瀯 UI锛屾坊鍔犲搷搴斿紡鏁版嵁缁戝畾鍜岀幇浠e寲璁捐 - `Extensions/ServiceCollectionExtensions.cs` - 娣诲姞 ReactiveUI 渚濊禆娉ㄥ叆閫傞厤鍣?- **鏂板鍔熻兘**: - 瀹屾暣鐨勪緷璧栨敞鍏ュ鍣ㄩ泦鎴? - 鍝嶅簲寮忔暟鎹粦瀹氬拰鍛戒护 - 鐜颁唬鍖?UI 璁捐锛堟敮鎸佸姞杞界姸鎬併€佽繘搴︽潯绛夛級 - 缁撴瀯鍖栨棩蹇楄褰? - 閰嶇疆绠$悊绯荤粺 - 鏈嶅姟鐢熷懡鍛ㄦ湡绠$悊 - **鏋舵瀯鐗规€?*: - 浣跨敤 Microsoft.Extensions.Hosting 杩涜搴旂敤绋嬪簭鐢熷懡鍛ㄦ湡绠$悊 - 闆嗘垚 ReactiveUI 妗嗘灦杩涜鍝嶅簲寮忕紪绋? - 鏀寔閰嶇疆鏂囦欢鐑噸杞藉拰鐜鍙橀噺 - 瀹屾暣鐨勬棩蹇楄褰曠郴缁燂紙鎺у埗鍙?+ 璋冭瘯杈撳嚭锛? - 鏈嶅姟娉ㄥ唽鍜岃В鏋愭満鍒? - 鍝嶅簲寮忔暟鎹粦瀹氬拰鍛戒护缁戝畾 - **UI 鏀硅繘**: - 鐜颁唬鍖栫殑鐣岄潰璁捐锛屼娇鐢ㄦ笎鍙樿壊鍜屽渾瑙? - 鍝嶅簲寮忔寜閽姸鎬侊紙鍔犺浇鏃剁鐢級 - 瀹炴椂鏁版嵁鏇存柊鏄剧ず - 鍔犺浇鐘舵€佹寚绀哄櫒 - 鐐瑰嚮璁℃暟鍣ㄥ拰鏃堕棿鏄剧ず - **鎶€鏈爤**: - .NET 9.0 - Avalonia 11.3.7 - ReactiveUI 11.3.7 - Microsoft.Extensions.* 9.0.0 - **璇存槑**: - 鎴愬姛闆嗘垚浜嗙幇浠?.NET 搴旂敤绋嬪簭鏋舵瀯 - 鎻愪緵浜嗗畬鏁寸殑渚濊禆娉ㄥ叆鍜岄厤缃鐞? - 瀹炵幇浜嗗搷搴斿紡缂栫▼妯″紡 - 寤虹珛浜嗗彲鎵╁睍鐨勫簲鐢ㄧ▼搴忓熀纭€ - 鏀寔璺ㄥ钩鍙伴儴缃诧紙Windows/Linux锛? ### 淇鍙岀獥鍙e惎鍔ㄩ棶棰?- **鏃ユ湡**: 2024骞?- **淇敼鍐呭**: 瑙e喅 Avalonia 搴旂敤绋嬪簭鍚姩鏃跺嚭鐜颁袱涓獥鍙o紙涓荤獥鍙?+ 鎺у埗鍙帮級鐨勯棶棰?- **闂**: 浣跨敤 HostBuilder 鍜屾棩蹇楄褰曟椂锛屼細鍚屾椂鍚姩涓诲簲鐢ㄧ▼搴忕獥鍙e拰鎺у埗鍙扮獥鍙?- **淇敼鏂囦欢**: - `MyAvaloniaApp.csproj` - 灏?OutputType 浠?"Exe" 鏀逛负 "WinExe" - `Program.cs` - 绉婚櫎鎺у埗鍙版棩蹇楁彁渚涚▼搴忥紝鍙繚鐣欒皟璇曡緭鍑?- **瑙e喅鏂规**: - 浣跨敤 WinExe 杈撳嚭绫诲瀷闅愯棌鎺у埗鍙扮獥鍙? - 绉婚櫎 AddConsole() 鏃ュ織鎻愪緵绋嬪簭 - 淇濈暀 AddDebug() 鐢ㄤ簬璋冭瘯杈撳嚭 - **鏁堟灉**: - 搴旂敤绋嬪簭鐜板湪鍙惎鍔ㄤ竴涓富绐楀彛 - 娌℃湁鎺у埗鍙扮獥鍙f樉绀? - 鏃ュ織浠嶇劧鍙互閫氳繃璋冭瘯杈撳嚭鏌ョ湅 - **璇存槑**: - WinExe 绫诲瀷涓撻棬鐢ㄤ簬 Windows GUI 搴旂敤绋嬪簭 - 閬垮厤浜嗘帶鍒跺彴绐楀彛鐨勬樉绀? - 淇濇寔浜嗘棩蹇楄褰曞姛鑳界敤浜庤皟璇? ### MVVM 缁戝畾妫€鏌?- **鏃ユ湡**: 2024骞?- **淇敼鍐呭**: 妫€鏌?MainWindow.axaml 鍜?MainWindowViewModel.cs 鐨?MVVM 缁戝畾鏄惁鐢熸晥 - **妫€鏌ョ粨鏋?*: 鉁?**MVVM 缁戝畾瀹屽叏鐢熸晥** - **妫€鏌ラ」鐩?*: - **XAML 缁戝畾璇硶**: 鎵€鏈夌粦瀹氳娉曟纭紝鍖呮嫭灞炴€х粦瀹氬拰鍛戒护缁戝畾 - **ViewModel 瀹炵幇**: 姝g‘瀹炵幇 ReactiveObject锛屼娇鐢?RaiseAndSetIfChanged 閫氱煡灞炴€у彉鍖? - **渚濊禆娉ㄥ叆閰嶇疆**: 瀹屾暣鐨勬湇鍔℃敞鍐屽拰瑙f瀽鏈哄埗 - **DataContext 璁剧疆**: 姝g‘鐨?ViewModel 娉ㄥ叆鍜?DataContext 璁剧疆 - **缁戝畾璇︽儏**: - `Title="{Binding Title}"` - 绐楀彛鏍囬缁戝畾 - `Text="{Binding Message}"` - 娑堟伅鏂囨湰缁戝畾 - `Text="{Binding ClickCount}"` - 鐐瑰嚮璁℃暟缁戝畾 - `IsVisible="{Binding IsLoading}"` - 鍔犺浇鐘舵€佸彲瑙佹€х粦瀹? - `Command="{Binding ClickCommand}"` - 鐐瑰嚮鍛戒护缁戝畾 - `Command="{Binding LoadDataCommand}"` - 鍔犺浇鏁版嵁鍛戒护缁戝畾 - `Command="{Binding ResetCommand}"` - 閲嶇疆鍛戒护缁戝畾 - `IsEnabled="{Binding !IsLoading}"` - 鎸夐挳鍚敤鐘舵€佺粦瀹氾紙鍙栧弽锛?- **鏋舵瀯楠岃瘉**: - 浣跨敤 HostBuilder + ReactiveUI + Avalonia 鐜颁唬鏋舵瀯 - 瀹屾暣鐨勪緷璧栨敞鍏ュ鍣ㄩ泦鎴? - 鍝嶅簲寮忕紪绋嬫ā寮忔纭疄鐜? - 鏈嶅姟鐢熷懡鍛ㄦ湡绠$悊瀹屽杽 - **璇存槑**: - MVVM 妯″紡瀹炵幇瀹屽叏姝g‘ - 鎵€鏈夋暟鎹粦瀹氶兘鑳芥甯稿伐浣? - 鍛戒护缁戝畾鏀寔寮傛鎿嶄綔 - 鍝嶅簲寮忓睘鎬у彉鍖栭€氱煡鏈哄埗瀹屽杽 ### 淇鏍囬鍖哄煙涓嶆樉绀洪棶棰?- **鏃ユ湡**: 2024骞?- **淇敼鍐呭**: 淇 MainWindow 鏍囬鍖哄煙涓嶆樉绀虹殑闂 - **闂**: 鏍囬鍖哄煙鐨?TextBlock 缁戝畾鍒?ViewModel 鐨?Title 鍜?Message 灞炴€э紝浣嗘病鏈夋樉绀哄唴瀹?- **鏍规湰鍘熷洜**: DataContext 璁剧疆椤哄簭閿欒锛屽湪 InitializeComponent() 涔嬪墠璁剧疆 DataContext - **淇敼鏂囦欢**: - `MainWindow.axaml.cs` - 璋冩暣 DataContext 璁剧疆椤哄簭锛屽湪 InitializeComponent() 涔嬪悗璁剧疆 - `ViewModels/MainWindowViewModel.cs` - 娣诲姞璋冭瘯鏃ュ織杈撳嚭 - **瑙e喅鏂规**: - 灏?`DataContext = viewModel;` 绉诲埌 `InitializeComponent();` 涔嬪悗 - 娣诲姞璇︾粏鐨勮皟璇曟棩蹇楁潵楠岃瘉缁戝畾鐘舵€? - 纭繚 ViewModel 姝g‘娉ㄥ叆鍒?DataContext - **鎶€鏈粏鑺?*: - Avalonia 闇€瑕佸湪 InitializeComponent() 涔嬪悗璁剧疆 DataContext - 娣诲姞浜?DataContext 绫诲瀷鍜屽睘鎬у€肩殑鏃ュ織杈撳嚭 - 楠岃瘉 ViewModel 鐨?Title 鍜?Message 灞炴€ф槸鍚︽纭垵濮嬪寲 - **鏁堟灉**: - 鏍囬鍖哄煙鐜板湪搴旇鑳芥纭樉绀?"My Avalonia App - HostBuilder + ReactiveUI" - 娑堟伅鍖哄煙鏄剧ず "娆㈣繋浣跨敤 HostBuilder + ReactiveUI 鏋舵瀯锛? - 鎵€鏈夌粦瀹氶兘鑳芥甯稿伐浣?- **璇存槑**: - 淇浜?MVVM 缁戝畾鐨勫叧閿棶棰? - 纭繚浜嗘纭殑鍒濆鍖栭『搴? - 娣诲姞浜嗚皟璇曟敮鎸佷互渚垮悗缁棶棰樻帓鏌? ### 杩涗竴姝ヨ皟璇曟爣棰樻樉绀洪棶棰?- **鏃ユ湡**: 2024骞?- **淇敼鍐呭**: 杩涗竴姝ヨ皟璇曟爣棰樺尯鍩熷拰鐐瑰嚮璁℃暟涓嶆樉绀虹殑闂 - **闂**: 鍗充娇淇浜?DataContext 璁剧疆椤哄簭锛屾爣棰樺尯鍩熷拰鐐瑰嚮璁℃暟浠嶇劧涓嶆樉绀?- **璋冭瘯鎺柦**: - 鍦?XAML 涓坊鍔犻潤鎬佹枃鏈拰缁戝畾鏂囨湰鐨勫姣旀祴璇? - 鍦?MainWindow 鏋勯€犲嚱鏁颁腑娣诲姞璇︾粏鐨勮皟璇曟棩蹇? - 鍦ㄦ棤鍙傛瀯閫犲嚱鏁颁腑涔熻缃?DataContext 鐢ㄤ簬娴嬭瘯 - **淇敼鏂囦欢**: - `MainWindow.axaml` - 娣诲姞闈欐€佹枃鏈姣旓紝楠岃瘉缁戝畾鏄惁宸ヤ綔 - `MainWindow.axaml.cs` - 娣诲姞璇︾粏鐨勮皟璇曟棩蹇楀拰 DataContext 楠岃瘉 - **娴嬭瘯鍐呭**: - 娣诲姞绾㈣壊闈欐€佹枃鏈?"娴嬭瘯鏍囬 - 闈欐€佹枃鏈? 楠岃瘉鏍囬鍖哄煙鏄惁鏄剧ず - 娣诲姞缁胯壊闈欐€佹枃鏈?"闈欐€佽鏁? 999" 楠岃瘉鍐呭鍖哄煙鏄惁鏄剧ず - 淇濈暀绾㈣壊缁戝畾鏂囨湰 `{Binding Title}` 鍜?`{Binding ClickCount}` 楠岃瘉缁戝畾 - 娣诲姞 DataContext 绫诲瀷鍜屽睘鎬у€肩殑璇︾粏鏃ュ織杈撳嚭 - **棰勬湡缁撴灉**: - 濡傛灉闈欐€佹枃鏈樉绀轰絾缁戝畾鏂囨湰涓嶆樉绀猴紝璇存槑缁戝畾鏈夐棶棰? - 濡傛灉闈欐€佹枃鏈篃涓嶆樉绀猴紝璇存槑 XAML 缁撴瀯鏈夐棶棰? - 閫氳繃鏃ュ織鍙互纭畾鍝釜鏋勯€犲嚱鏁拌璋冪敤 - **璇存槑**: - 浣跨敤瀵规瘮娴嬭瘯鏂规硶蹇€熷畾浣嶉棶棰? - 娣诲姞鍏ㄩ潰鐨勮皟璇曚俊鎭互渚块棶棰樻帓鏌? - 纭繚鑳藉纭畾闂鐨勬牴鏈師鍥? ### 闂褰诲簳瑙e喅 - 娓呯悊璋冭瘯浠g爜 - **鏃ユ湡**: 2024骞?- **淇敼鍐呭**: 闂宸插交搴曡В鍐筹紝娓呯悊璋冭瘯浠g爜锛屾仮澶嶆甯哥殑鐣岄潰鏄剧ず - **瑙e喅缁撴灉**: 鉁?**MVVM 缁戝畾瀹屽叏姝e父宸ヤ綔** - **鏈€缁堣В鍐虫柟妗?*: - 璋冩暣 DataContext 璁剧疆椤哄簭锛氬湪 `InitializeComponent()` 涔嬪悗璁剧疆 - 纭繚 ViewModel 姝g‘娉ㄥ叆鍒?DataContext - 鎵€鏈夌粦瀹氶兘鑳芥甯告樉绀哄拰鏇存柊 - **娓呯悊鍐呭**: - 绉婚櫎 XAML 涓殑闈欐€佹祴璇曟枃鏈? - 绉婚櫎杩囧害鐨勮皟璇曟棩蹇楄緭鍑? - 鎭㈠姝e父鐨勭晫闈㈡牱寮忓拰棰滆壊 - 淇濈暀蹇呰鐨勬棩蹇楄褰?- **淇敼鏂囦欢**: - `MainWindow.axaml` - 绉婚櫎璋冭瘯鏂囨湰锛屾仮澶嶆甯哥粦瀹? - `MainWindow.axaml.cs` - 娓呯悊璋冭瘯浠g爜锛屼繚鐣欐牳蹇冨姛鑳? - `ViewModels/MainWindowViewModel.cs` - 绉婚櫎璋冭瘯鏃ュ織 - **鏈€缁堟晥鏋?*: - 鏍囬姝g‘鏄剧ず锛?My Avalonia App - HostBuilder + ReactiveUI" - 娑堟伅姝g‘鏄剧ず锛?娆㈣繋浣跨敤 HostBuilder + ReactiveUI 鏋舵瀯锛? - 鐐瑰嚮璁℃暟姝g‘鏄剧ず鍜屾洿鏂? - 鎵€鏈夋寜閽懡浠ゆ甯稿伐浣? - 鍔犺浇鐘舵€佹纭樉绀?- **鎶€鏈€荤粨**: - 鍏抽敭闂锛欴ataContext 蹇呴』鍦?`InitializeComponent()` 涔嬪悗璁剧疆 - MVVM 缁戝畾瀹屽叏姝e父锛氬睘鎬х粦瀹氥€佸懡浠ょ粦瀹氥€佸彲瑙佹€х粦瀹? - 鍝嶅簲寮忕紪绋嬫ā寮忔纭疄鐜? - 渚濊禆娉ㄥ叆鍜屾棩蹇楄褰曟甯稿伐浣?- **璇存槑**: - 闂宸插交搴曡В鍐筹紝搴旂敤绋嬪簭瀹屽叏姝e父宸ヤ綔 - 娓呯悊浜嗘墍鏈夎皟璇曚唬鐮侊紝淇濇寔浠g爜鏁存磥 - 寤虹珛浜嗙ǔ瀹氱殑 MVVM 鏋舵瀯鍩虹 ### 淇鏈嶅姟鎻愪緵绋嬪簭璁剧疆闂 - **鏃ユ湡**: 2024骞?- **淇敼鍐呭**: 淇 Program.cs 涓湇鍔℃彁渚涚▼搴忚缃埌 App 瀹炰緥鐨勯棶棰?- **闂**: 鍘熸潵鐨勪唬鐮佽瘯鍥惧皢鏈嶅姟鎻愪緵绋嬪簭璁剧疆鍒?AppBuilder 鍒涘缓鐨?App 瀹炰緥锛屼絾璇ュ疄渚嬩笉鏄粠渚濊禆娉ㄥ叆瀹瑰櫒鑾峰彇鐨?- **淇敼鏂囦欢**: - `Program.cs` - 閲嶆瀯 Main 鏂规硶鍜?BuildAvaloniaApp 鏂规硶 - `App.axaml.cs` - 淇敼鏋勯€犲嚱鏁帮紝鐩存帴閫氳繃渚濊禆娉ㄥ叆鑾峰彇鏈嶅姟 - **瑙e喅鏂规**: - 浠庝緷璧栨敞鍏ュ鍣ㄧ洿鎺ヨ幏鍙?App 瀹炰緥锛歚var app = host.Services.GetRequiredService();` - 淇敼 BuildAvaloniaApp 鏂规硶鎺ュ彈 App 瀹炰緥鍙傛暟锛歚AppBuilder.Configure(() => app)` - 绉婚櫎 App 绫讳腑鐨?SetServiceProvider 鏂规硶 - 淇敼 App 鏋勯€犲嚱鏁扮洿鎺ユ帴鏀?IServiceProvider 鍜?ILogger - **鎶€鏈敼杩?*: - 纭繚 App 瀹炰緥瀹屽叏鐢变緷璧栨敞鍏ュ鍣ㄧ鐞? - 娑堥櫎浜嗘湇鍔℃彁渚涚▼搴忎负绌虹殑妫€鏌ラ€昏緫 - 绠€鍖栦簡浠g爜缁撴瀯锛屾彁楂樹簡鍙潬鎬?- **鏁堟灉**: - App 瀹炰緥鐜板湪瀹屽叏閫氳繃渚濊禆娉ㄥ叆鍒涘缓 - 鏈嶅姟鎻愪緵绋嬪簭濮嬬粓鍙敤锛屾棤闇€棰濆璁剧疆 - 浠g爜鏇村姞绠€娲佸拰鍙潬 - **璇存槑**: - 淇浜嗕緷璧栨敞鍏ユ灦鏋勪腑鐨勫叧閿棶棰? - 纭繚浜嗘湇鍔℃彁渚涚▼搴忕殑姝g‘浼犻€? - 鎻愰珮浜嗗簲鐢ㄧ▼搴忕殑绋冲畾鎬у拰鍙淮鎶ゆ€? ### Host.CreateApplicationBuilder 鍏煎鎬у垎鏋?- **鏃ユ湡**: 2024骞?- **淇敼鍐呭**: 鍒嗘瀽鏄惁搴旇灏?Host.CreateDefaultBuilder 鏇挎崲涓?Host.CreateApplicationBuilder - **鍒嗘瀽缁撴灉**: 鉂?**涓嶅缓璁浛鎹紝缁х画浣跨敤 Host.CreateDefaultBuilder** - **鎶€鏈垎鏋?*: - `Host.CreateApplicationBuilder` 杩斿洖 `HostApplicationBuilder` 绫诲瀷 - `HostApplicationBuilder` 涓嶅吋瀹圭幇鏈夌殑 `IHostBuilder` 閰嶇疆鏂规硶 - 缂栬瘧閿欒锛歚HostApplicationBuilder` 涓嶅寘鍚?`ConfigureAppConfiguration` 鏂规硶 - 鐜版湁鐨勯厤缃摼锛圕onfigureAppConfiguration銆丆onfigureLogging銆丆onfigureServices锛夋棤娉曠洿鎺ヤ娇鐢?- **鍏煎鎬ч棶棰?*: - 绫诲瀷涓嶅尮閰嶏細`HostApplicationBuilder` vs `IHostBuilder` - 閰嶇疆鏂规硶涓嶅吋瀹癸細闇€瑕佸畬鍏ㄩ噸鍐欓厤缃€昏緫 - API 璁捐宸紓锛歚HostApplicationBuilder` 浣跨敤涓嶅悓鐨勯厤缃ā寮?- **缁撹**: - 瀵逛簬 Avalonia 妗岄潰搴旂敤绋嬪簭锛宍Host.CreateDefaultBuilder` 浠嶇劧鏄渶浣抽€夋嫨 - 鐜版湁鐨勯厤缃灦鏋勫畬鍏ㄦ弧瓒抽渶姹? - 鏃犻渶杩涜涓嶅繀瑕佺殑 API 杩佺Щ - **璇存槑**: - 楠岃瘉浜?API 鍏煎鎬э紝纭鐜版湁鏋舵瀯鐨勭ǔ瀹氭€? - 閬垮厤浜嗕笉蹇呰鐨勪唬鐮侀噸鏋勫拰娼滃湪闂 - 淇濇寔浜嗗簲鐢ㄧ▼搴忕殑绋冲畾鎬у拰鍙淮鎶ゆ€? ### 浼樺寲 CreateWSLTask.ps1 鑴氭湰 - **鏃ユ湡**: 2024骞?- **淇敼鍐呭**: 浼樺寲 PowerShell 鑴氭湰锛岃В鍐充腑鏂囦贡鐮侀棶棰樺苟娣诲姞璇︾粏鐨勬棩蹇楁墦鍗板姛鑳?- **淇敼鏂囦欢**: - `CreateWSLTask.ps1` - 瀹屽叏閲嶆瀯锛屾坊鍔犵紪鐮佽缃拰鏃ュ織绯荤粺 - **涓昏鏀硅繘**: - **瑙e喅涔辩爜闂**: 璁剧疆鎺у埗鍙扮紪鐮佷负 UTF-8 - `[Console]::OutputEncoding = [System.Text.Encoding]::UTF8` - `$OutputEncoding = [System.Text.Encoding]::UTF8` - **娣诲姞鏃ュ織绯荤粺**: 鍒涘缓 `Write-Log` 鍑芥暟锛屾敮鎸佷笉鍚屾棩蹇楃骇鍒? - 鏀寔 INFO銆乄ARN銆丒RROR銆丼UCCESS 绛夋棩蹇楃骇鍒? - 鑷姩娣诲姞鏃堕棿鎴虫牸寮忥細`[yyyy-MM-dd HH:mm:ss] [LEVEL] message` - 鍙€夌殑鏃ュ織鏂囦欢杈撳嚭鍔熻兘锛堝凡娉ㄩ噴锛屽彲鎸夐渶鍚敤锛? - **澧炲己閿欒澶勭悊**: 娣诲姞 try-catch 寮傚父澶勭悊鏈哄埗 - 鎹曡幏鎵€鏈夊彲鑳界殑寮傚父骞惰褰曡缁嗛敊璇俊鎭? - 澶辫触鏃惰繑鍥為€傚綋鐨勯€€鍑轰唬鐮? - **璇︾粏鐨勬搷浣滄棩蹇?*: 涓烘瘡涓搷浣滄楠ゆ坊鍔犳棩蹇楄褰? - 浠诲姟閰嶇疆淇℃伅杈撳嚭 - 浠诲姟瀛樺湪鎬ф鏌? - 瑙﹀彂鍣ㄥ垱寤鸿繃绋? - 浠诲姟鎿嶄綔鍒涘缓杩囩▼ - 鏉冮檺璁剧疆杩囩▼ - 浠诲姟娉ㄥ唽杩囩▼ - 鍒涘缓缁撴灉楠岃瘉 - **鏂板鍔熻兘**: - 浠诲姟鍒涘缓楠岃瘉锛氭鏌ヤ换鍔℃槸鍚︽垚鍔熷垱寤? - 浠诲姟鐘舵€佹樉绀猴細鏄剧ず鍒涘缓鍚庣殑浠诲姟鐘舵€佸拰璺緞 - 璇︾粏鐨勯厤缃俊鎭緭鍑猴細鏄剧ず鎵€鏈変换鍔″弬鏁? - 鍙€夌殑鏂囦欢鏃ュ織璁板綍锛氭敮鎸佸皢鏃ュ織鍐欏叆鏂囦欢 - **鎶€鏈壒鎬?*: - UTF-8 缂栫爜鏀寔锛屽畬缇庢樉绀轰腑鏂? - 缁撴瀯鍖栨棩蹇楄褰曪紝渚夸簬闂鎺掓煡 - 瀹屾暣鐨勫紓甯稿鐞嗘満鍒? - 璇︾粏鐨勬搷浣滄楠よ窡韪? - 浠诲姟鍒涘缓缁撴灉楠岃瘉 - **浣跨敤鏁堟灉**: - 瑙e喅涓枃涔辩爜闂锛屾墍鏈変腑鏂囦俊鎭甯告樉绀? - 鎻愪緵璇︾粏鐨勬搷浣滄棩蹇楋紝渚夸簬璋冭瘯鍜岀洃鎺? - 澧炲己閿欒澶勭悊锛屾彁楂樿剼鏈彲闈犳€? - 鏀寔鏃ュ織鏂囦欢璁板綍锛屼究浜庡悗缁垎鏋?- **璇存槑**: - 褰诲簳瑙e喅浜?PowerShell 鑴氭湰鐨勪腑鏂囦贡鐮侀棶棰? - 寤虹珛浜嗗畬鏁寸殑鏃ュ織璁板綍绯荤粺 - 鎻愰珮浜嗚剼鏈殑鍙淮鎶ゆ€у拰鍙皟璇曟€? - 涓哄悗缁剼鏈紭鍖栨彁渚涗簡鑹ソ鐨勫熀纭€ ### 杩涗竴姝ヤ紭鍖?CreateWSLTask.ps1 - 閲囩敤鑻辨枃杈撳嚭 - **鏃ユ湡**: 2024骞?- **淇敼鍐呭**: 灏嗚剼鏈腑鐨勬墍鏈夎緭鍑轰俊鎭敼涓鸿嫳鏂囷紝鍙繚鐣欎腑鏂囨敞閲婏紝褰诲簳閬垮厤涔辩爜闂 - **淇敼鏂囦欢**: - `CreateWSLTask.ps1` - 灏嗘墍鏈夋棩蹇楄緭鍑哄拰浠诲姟鎻忚堪鏀逛负鑻辨枃 - **涓昏鏀硅繘**: - **鑻辨枃杈撳嚭**: 鎵€鏈?Write-Log 娑堟伅鏀逛负鑻辨枃 - "寮€濮嬪垱寤?.." 鈫?"Starting to create..." - "浠诲姟鍚嶇О" 鈫?"Task Name" - "妫€鏌ヤ换鍔℃槸鍚﹀凡瀛樺湪" 鈫?"Checking if task already exists" - "鍒涘缓瑙﹀彂鍣? 鈫?"Creating trigger" - "浠诲姟鍒涘缓楠岃瘉鎴愬姛" 鈫?"Task creation verified successfully" - **鑻辨枃浠诲姟鎻忚堪**: 浠诲姟鎻忚堪鏀逛负鑻辨枃 - "寮€鏈鸿嚜鍔ㄩ€氳繃 WSL 閲嶅惎 Superset Docker 瀹瑰櫒" 鈫?"Auto restart Superset Docker container via WSL on system startup" - **淇濈暀涓枃娉ㄩ噴**: 鎵€鏈変唬鐮佹敞閲婁繚鎸佷腑鏂囷紝渚夸簬鐞嗚В - **淇濇寔鍔熻兘涓嶅彉**: 鑴氭湰鍔熻兘瀹屽叏涓嶅彉锛屼粎淇敼鏄剧ず鏂囨湰 - **鎶€鏈紭鍔?*: - 褰诲簳閬垮厤涓枃涔辩爜闂 - 鎻愰珮鑴氭湰鐨勫浗闄呭寲鍏煎鎬? - 淇濇寔浠g爜娉ㄩ噴鐨勪腑鏂囧彲璇绘€? - 纭繚鍦ㄤ换浣曠郴缁熺幆澧冧笅閮借兘姝e父鏄剧ず - **浣跨敤鏁堟灉**: - 鎵€鏈夎緭鍑轰俊鎭甯告樉绀猴紝鏃犱贡鐮? - 鏃ュ織淇℃伅娓呮櫚鏄撴噦 - 浠诲姟鎻忚堪鍦ㄤ换鍔¤鍒掔▼搴忎腑鏄剧ず涓鸿嫳鏂? - 浠g爜娉ㄩ噴淇濇寔涓枃锛屼究浜庣淮鎶?- **璇存槑**: - 閲囩敤鑻辨枃杈撳嚭鏄渶褰诲簳鐨勪贡鐮佽В鍐虫柟妗? - 淇濇寔浜嗚剼鏈殑瀹屾暣鍔熻兘鍜屾棩蹇楄褰? - 鎻愰珮浜嗚剼鏈殑閫氱敤鎬у拰鍏煎鎬? - 涓哄悗缁剼鏈紑鍙戞彁渚涗簡鏈€浣冲疄璺? ### 纭 CreateWSLTask.ps1 宸插寘鍚垹闄ょ幇鏈変换鍔″姛鑳?- **鏃ユ湡**: 2024骞?- **妫€鏌ョ粨鏋?*: 鉁?**鑴氭湰宸插畬缇庡疄鐜板垹闄ょ幇鏈変换鍔″姛鑳?* - **鐜版湁鍔熻兘**: - **浠诲姟瀛樺湪鎬ф鏌?*: 浣跨敤 `Get-ScheduledTask -TaskName $TaskName -ErrorAction SilentlyContinue` 妫€鏌ヤ换鍔℃槸鍚﹀凡瀛樺湪 - **鑷姩鍒犻櫎鐜版湁浠诲姟**: 濡傛灉浠诲姟瀛樺湪锛屼娇鐢?`Unregister-ScheduledTask -TaskName $TaskName -Confirm:$false` 鑷姩鍒犻櫎 - **璇︾粏鏃ュ織璁板綍**: 涓烘瘡涓楠ゆ坊鍔犺缁嗙殑鏃ュ織杈撳嚭锛屽寘鎷垹闄ゆ搷浣滅殑纭 - **閿欒澶勭悊**: 瀹屾暣鐨勫紓甯稿鐞嗘満鍒讹紝纭繚鎿嶄綔瀹夊叏鍙潬 - **鑴氭湰閫昏緫**: 1. 妫€鏌ヤ换鍔℃槸鍚﹀凡瀛樺湪 2. 濡傛灉瀛樺湪锛岃褰曡鍛婃棩蹇楀苟鍒犻櫎鐜版湁浠诲姟 3. 濡傛灉涓嶅瓨鍦紝璁板綍淇℃伅鏃ュ織 4. 缁х画鍒涘缓鏂颁换鍔? 5. 楠岃瘉浠诲姟鍒涘缓缁撴灉 - **鎶€鏈壒鎬?*: - 浣跨敤 `-ErrorAction SilentlyContinue` 閬垮厤浠诲姟涓嶅瓨鍦ㄦ椂鐨勯敊璇? - 浣跨敤 `-Confirm:$false` 鑷姩纭鍒犻櫎鎿嶄綔锛屾棤闇€鐢ㄦ埛浜や簰 - 瀹屾暣鐨勬棩蹇楄褰曠郴缁燂紝渚夸簬璺熻釜鎿嶄綔杩囩▼ - UTF-8 缂栫爜鏀寔锛屽畬缇庢樉绀轰腑鏂囨敞閲?- **璇存槑**: - 鑴氭湰宸茬粡瀹岀編瀹炵幇浜嗙敤鎴烽渶姹? - 鏃犻渶杩涗竴姝ヤ慨鏀癸紝鍔熻兘瀹屾暣涓斿彲闈? - 姣忔杩愯閮戒細鑷姩澶勭悊鐜版湁浠诲姟鐨勫垹闄ゅ拰閲嶆柊鍒涘缓 - 鎻愪緵浜嗚缁嗙殑鎿嶄綔鏃ュ織锛屼究浜庨棶棰樻帓鏌? ### 鍒涘缓 WSL Docker 瀹瑰櫒鑷惎鍔ㄦ壒澶勭悊鑴氭湰 - **鏃ユ湡**: 2024骞?- **淇敼鍐呭**: 鍒涘缓 Windows 11 鐜涓嬬殑 WSL Docker 瀹瑰櫒鑷惎鍔ㄦ壒澶勭悊鑴氭湰 - **淇敼鏂囦欢**: - `startup-superset.bat` - 鏂板缓鎵瑰鐞嗚剼鏈紝鐢ㄤ簬鑷姩鍚姩 WSL 骞堕噸鍚?Superset Docker 瀹瑰櫒 - **鑴氭湰鍔熻兘**: - **WSL 鐜妫€鏌?*: 楠岃瘉 WSL 鏄惁宸插畨瑁呭拰鍙敤 - **鍙戣鐗堥獙璇?*: 妫€鏌?Ubuntu-22.04 鍙戣鐗堟槸鍚﹀瓨鍦? - **Docker 瀹瑰櫒绠$悊**: 鑷姩閲嶅惎 Superset Docker 瀹瑰櫒 - **鐘舵€佺洃鎺?*: 鏄剧ず瀹瑰櫒閲嶅惎鍓嶅悗鐨勭姸鎬? - **閿欒澶勭悊**: 瀹屾暣鐨勯敊璇鏌ュ拰寮傚父澶勭悊鏈哄埗 - **鎶€鏈壒鎬?*: - **涓枃娉ㄩ噴**: 鎵€鏈変唬鐮佹敞閲婁娇鐢ㄤ腑鏂囷紝渚夸簬鐞嗚В鍜岀淮鎶? - **鑻辨枃鏃ュ織**: 鎵€鏈夋棩蹇楄緭鍑轰娇鐢ㄨ嫳鏂囷紝閬垮厤缂栫爜闂 - **UTF-8 缂栫爜**: 璁剧疆鎺у埗鍙扮紪鐮佷负 UTF-8锛屾敮鎸佷腑鏂囨樉绀? - **璇︾粏鏃ュ織**: 璁板綍姣忎釜鎿嶄綔姝ラ鐨勬椂闂存埑鍜岀姸鎬? - **鐘舵€侀獙璇?*: 妫€鏌ュ懡浠ゆ墽琛岀粨鏋滃拰瀹瑰櫒鐘舵€?- **涓昏鍛戒护**: - `wsl.exe -d Ubuntu-22.04 --user root -- bash -c 'docker restart superset'` - 鑷姩妫€鏌?WSL 鍜?Docker 鐜 - 鏄剧ず瀹瑰櫒鐘舵€佸拰杩愯鎯呭喌 - **浣跨敤鍦烘櫙**: - Windows 11 绯荤粺鍚姩鏃惰嚜鍔ㄦ墽琛? - 鎵嬪姩杩愯鑴氭湰閲嶅惎瀹瑰櫒 - 绯荤粺缁存姢鍜屾晠闅滄仮澶?- **閿欒澶勭悊**: - WSL 鏈畨瑁呮鏌? - Ubuntu-22.04 鍙戣鐗堜笉瀛樺湪妫€鏌? - Docker 瀹瑰櫒閲嶅惎澶辫触澶勭悊 - 璇︾粏鐨勯敊璇唬鐮佸拰鐘舵€佷俊鎭?- **璇存槑**: - 鎻愪緵浜嗗畬鏁寸殑 WSL Docker 瀹瑰櫒绠$悊瑙e喅鏂规 - 鏀寔涓枃娉ㄩ噴鍜岃嫳鏂囨棩蹇楃殑鏈€浣冲疄璺? - 鍖呭惈鍏ㄩ潰鐨勯敊璇鐞嗗拰鐘舵€佺洃鎺? - 閫傜敤浜?Windows 11 鐜鐨勮嚜鍔ㄥ寲閮ㄧ讲 ### 淇 SetupAutoStartup.ps1 鑴氭湰璺緞鑾峰彇闂 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 淇 PowerShell 鑴氭湰涓?`$MyInvocation.MyCommand.Path` 涓虹┖鍊煎鑷寸殑閿欒 - **闂**: 褰撻€氳繃 `.\SetupAutoStartup.ps1` 鏂瑰紡鎵ц鑴氭湰鏃讹紝`$MyInvocation.MyCommand.Path` 杩斿洖绌哄€硷紝瀵艰嚧 `Split-Path` 鍛戒护澶辫触 - **閿欒淇℃伅**: "鏃犳硶灏嗗弬鏁扮粦瀹氬埌鍙傛暟'Path'锛屽洜涓鸿鍙傛暟鏄┖鍊? - **淇敼鏂囦欢**: - `SetupAutoStartup.ps1` - 淇鑴氭湰璺緞鑾峰彇閫昏緫 - **瑙e喅鏂规**: - 娣诲姞鏉′欢鍒ゆ柇锛氭鏌?`$MyInvocation.MyCommand.Path` 鏄惁涓虹┖ - 濡傛灉涓虹┖锛屼娇鐢?`Get-Location` 鑾峰彇褰撳墠宸ヤ綔鐩綍浣滀负鑴氭湰鐩綍 - 濡傛灉涓嶄负绌猴紝浣跨敤 `Split-Path -Parent` 鑾峰彇鑴氭湰鎵€鍦ㄧ洰褰?- **鎶€鏈敼杩?*: - 浣跨敤鏉′欢琛ㄨ揪寮忥細`if ($MyInvocation.MyCommand.Path) { ... } else { ... }` - 鎻愪緵鍥為€€鏈哄埗锛氬綋鏃犳硶鑾峰彇鑴氭湰璺緞鏃朵娇鐢ㄥ綋鍓嶇洰褰? - 淇濇寔鑴氭湰鍔熻兘涓嶅彉锛屼粎淇璺緞鑾峰彇闂 - **淇敼浠g爜**: ```powershell # 鑾峰彇褰撳墠鑴氭湰鐩綍 $scriptDir = if ($MyInvocation.MyCommand.Path) { Split-Path -Parent $MyInvocation.MyCommand.Path } else { # 濡傛灉 $MyInvocation.MyCommand.Path 涓虹┖锛屼娇鐢ㄥ綋鍓嶅伐浣滅洰褰? Get-Location } ``` - **鏁堟灉**: - 瑙e喅浜嗚剼鏈墽琛屾椂鐨勮矾寰勮幏鍙栭敊璇? - 纭繚鑴氭湰鑳藉湪涓嶅悓鎵ц鏂瑰紡涓嬫甯稿伐浣? - 淇濇寔浜嗗師鏈夌殑鍔熻兘閫昏緫涓嶅彉 - **璇存槑**: - 淇浜?PowerShell 鑴氭湰鐨勫吋瀹规€ч棶棰? - 鎻愪緵浜嗘洿鍋ュ.鐨勮矾寰勮幏鍙栨満鍒? - 纭繚鑴氭湰鍦ㄥ悇绉嶆墽琛岀幆澧冧笅閮借兘姝e父杩愯 ### 淇 SetupAutoStartup.ps1 鑴氭湰杩斿洖鍊奸€昏緫闂 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 淇鑴氭湰鎴愬姛鍒涘缓浠诲姟鍚庝粛鏄剧ず"Setup Failed"鐨勯棶棰?- **闂**: 铏界劧浠诲姟鍒涘缓鎴愬姛锛屼絾鑴氭湰鐨勮繑鍥炲€奸€昏緫鏈夐棶棰橈紝瀵艰嚧鏈€鍚庢樉绀哄け璐ヤ俊鎭?- **鏍规湰鍘熷洜**: `return 0` 璇彞浣嶇疆涓嶅綋锛屽湪鎴愬姛鍒嗘敮涓病鏈夋纭繑鍥?- **淇敼鏂囦欢**: - `SetupAutoStartup.ps1` - 淇杩斿洖鍊奸€昏緫 - **瑙e喅鏂规**: - 灏?`return 0` 璇彞绉诲埌鎴愬姛鍒嗘敮鍐呴儴 - 纭繚鎴愬姛鍒涘缓浠诲姟鍚庣珛鍗宠繑鍥炴垚鍔熺姸鎬? - 淇濇寔閿欒鍒嗘敮鐨?`return 1` 閫昏緫涓嶅彉 - **淇敼浠g爜**: ```powershell if ($createdTask) { # ... 鎴愬姛娑堟伅杈撳嚭 ... return 0 # 绉诲埌鎴愬姛鍒嗘敮鍐呴儴 } else { Write-Log "ERROR: Failed to create scheduled task" "ERROR" return 1 } ``` - **鏁堟灉**: - 淇浜嗘垚鍔熷垱寤轰换鍔″悗浠嶆樉绀哄け璐ヤ俊鎭殑闂 - 纭繚鑴氭湰杩斿洖鍊间笌鎵ц缁撴灉涓€鑷? - 鎻愪緵姝g‘鐨勬垚鍔?澶辫触鐘舵€佸弽棣?- **璇存槑**: - 淇浜嗚剼鏈€昏緫娴佺▼涓殑鍏抽敭闂 - 纭繚浜嗚繑鍥炲€间笌鎵ц缁撴灉鐨勪竴鑷存€? - 鎻愰珮浜嗚剼鏈殑鍙潬鎬у拰鐢ㄦ埛浣撻獙 ### 杩涗竴姝ヨ皟璇?SetupAutoStartup.ps1 鑴氭湰鎵ц娴佺▼ - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 娣诲姞璇︾粏鐨勮皟璇曚俊鎭潵璇婃柇鑴氭湰鎵ц娴佺▼闂 - **闂**: 铏界劧浠诲姟鍒涘缓鎴愬姛锛屼絾鑴氭湰浠嶇劧鏄剧ず"Setup Failed"锛岄渶瑕佺‘瀹氶棶棰樻牴婧?- **淇敼鏂囦欢**: - `SetupAutoStartup.ps1` - 娣诲姞璋冭瘯淇℃伅鍜屽紓甯稿鐞?- **璋冭瘯鎺柦**: - 鍦?`Register-ScheduledTask` 鍛戒护鍛ㄥ洿娣诲姞 try-catch 鍧? - 鍦ㄦ垚鍔熷垎鏀腑娣诲姞璋冭瘯鏃ュ織纭 `return 0` 鎵ц - 鍦?catch 鍧椾腑娣诲姞璋冭瘯鏃ュ織纭寮傚父澶勭悊 - 鍦ㄥ嚱鏁板紑濮嬪娣诲姞璋冭瘯鏃ュ織纭鍑芥暟鎵ц - **鎶€鏈敼杩?*: - 澧炲己寮傚父澶勭悊锛氫负浠诲姟娉ㄥ唽娣诲姞鐙珛鐨勫紓甯稿鐞? - 娣诲姞璋冭瘯鏃ュ織锛氫娇鐢?"DEBUG" 绾у埆鏍囪璋冭瘯淇℃伅 - 璇︾粏閿欒淇℃伅锛氳褰曚换鍔℃敞鍐屽け璐ョ殑鍏蜂綋鍘熷洜 - **璋冭瘯淇℃伅**: - `DEBUG: Setup-AutoStartup function started` - 纭鍑芥暟寮€濮嬫墽琛? - `DEBUG: About to return 0 from success branch` - 纭鎴愬姛鍒嗘敮鎵ц - `DEBUG: About to return 1 from catch block` - 纭寮傚父澶勭悊鎵ц - **棰勬湡鏁堟灉**: - 閫氳繃璋冭瘯淇℃伅纭畾鑴氭湰鐨勫疄闄呮墽琛岃矾寰? - 璇嗗埆瀵艰嚧"Setup Failed"鏄剧ず鐨勫叿浣撳師鍥? - 涓烘渶缁堜慨澶嶆彁渚涘噯纭殑璇婃柇淇℃伅 - **璇存槑**: - 娣诲姞浜嗗叏闈㈢殑璋冭瘯鏀寔浠ヤ究闂璇婃柇 - 澧炲己浜嗗紓甯稿鐞嗙殑璇︾粏绋嬪害 - 涓鸿剼鏈殑鏈€缁堜慨澶嶆彁渚涗簡蹇呰鐨勮瘖鏂俊鎭? ### 鏈€缁堜慨澶?SetupAutoStartup.ps1 鑴氭湰杩斿洖鍊奸棶棰?- **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 淇 PowerShell 鍑芥暟杩斿洖鍊煎鐞嗛棶棰橈紝纭繚姝g‘杩斿洖鎴愬姛/澶辫触鐘舵€?- **闂鏍规簮**: PowerShell 鍑芥暟涓殑澶氫釜杈撳嚭璇彞瀵艰嚧杩斿洖鍊兼贩涔憋紝鍗充娇鏈?`return 0` 涔熶細杩斿洖鍏朵粬鍊?- **璋冭瘯鍙戠幇**: 閫氳繃璋冭瘯淇℃伅纭 `return 0` 琚墽琛岋紝浣嗕富鑴氭湰浠嶈涓哄嚱鏁拌繑鍥為潪闆跺€?- **淇敼鏂囦欢**: - `SetupAutoStartup.ps1` - 淇杩斿洖鍊煎鐞嗘満鍒?- **瑙e喅鏂规**: - 浣跨敤 `Write-Output` 鏄庣‘杈撳嚭杩斿洖鍊? - 浣跨敤 `return` 璇彞缁堟鍑芥暟鎵ц - 纭繚鍑芥暟鍙繑鍥炰竴涓槑纭殑鍊?- **淇敼浠g爜**: ```powershell # 鎴愬姛鍒嗘敮 Write-Output 0 return # 澶辫触鍒嗘敮 Write-Output 1 return ``` - **鎶€鏈師鐞?*: - PowerShell 浼氬皢鍑芥暟涓殑鎵€鏈夎緭鍑洪兘浣滀负杩斿洖鍊肩殑涓€閮ㄥ垎 - 浣跨敤 `Write-Output` 鏄庣‘鎸囧畾杩斿洖鍊? - 浣跨敤 `return` 缁堟鍑芥暟鎵ц锛岄伩鍏嶅悗缁緭鍑哄共鎵拌繑鍥炲€?- **鏁堟灉**: - 淇浜嗘垚鍔熷垱寤轰换鍔″悗浠嶆樉绀哄け璐ヤ俊鎭殑闂 - 纭繚鑴氭湰杩斿洖鍊间笌鎵ц缁撴灉瀹屽叏涓€鑷? - 鎻愪緵姝g‘鐨勬垚鍔?澶辫触鐘舵€佸弽棣?- **璇存槑**: - 褰诲簳瑙e喅浜?PowerShell 杩斿洖鍊煎鐞嗙殑鎶€鏈棶棰? - 纭繚浜嗚剼鏈€昏緫鐨勬纭€у拰鍙潬鎬? - 鎻愪緵浜嗗畬鏁寸殑鑷惎鍔ㄩ厤缃В鍐虫柟妗? ### 杩涗竴姝ヨ皟璇?SetupAutoStartup.ps1 杩斿洖鍊奸棶棰?- **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 娣诲姞璇︾粏鐨勮繑鍥炲€艰皟璇曚俊鎭紝杩涗竴姝ヨ瘖鏂?PowerShell 杩斿洖鍊煎鐞嗛棶棰?- **闂**: 鍗充娇淇浜嗚繑鍥炲€煎鐞嗭紝鑴氭湰浠嶇劧鏄剧ず"Setup Failed"锛岄渶瑕佹煡鐪嬪疄闄呯殑杩斿洖鍊?- **淇敼鏂囦欢**: - `SetupAutoStartup.ps1` - 娣诲姞杩斿洖鍊艰皟璇曚俊鎭拰绠€鍖栬繑鍥炲€煎鐞?- **璋冭瘯鎺柦**: - 娣诲姞杩斿洖鍊肩被鍨嬪拰鍊肩殑璇︾粏璋冭瘯淇℃伅 - 绠€鍖栬繑鍥炲€煎鐞嗭紝鐩存帴浣跨敤 `return 0` 鍜?`return 1` - 鏄剧ず杩斿洖鍊肩殑绫诲瀷鍜屾瘮杈冪粨鏋?- **璋冭瘯淇℃伅**: - `DEBUG: Function returned value: $result` - 鏄剧ず瀹為檯杩斿洖鍊? - `DEBUG: Return value type: $($result.GetType().Name)` - 鏄剧ず杩斿洖鍊肩被鍨? - `DEBUG: Return value equals 0: $($result -eq 0)` - 鏄剧ず姣旇緝缁撴灉 - **鎶€鏈敼杩?*: - 绠€鍖栬繑鍥炲€煎鐞嗭細鐩存帴浣跨敤 `return 0` 鍜?`return 1` - 绉婚櫎澶嶆潅鐨?`Write-Output` 澶勭悊 - 娣诲姞璇︾粏鐨勮繑鍥炲€艰瘖鏂俊鎭?- **棰勬湡鏁堟灉**: - 閫氳繃璋冭瘯淇℃伅纭畾杩斿洖鍊肩殑瀹為檯鍐呭鍜岀被鍨? - 璇嗗埆 PowerShell 杩斿洖鍊煎鐞嗙殑鍏蜂綋闂 - 涓烘渶缁堜慨澶嶆彁渚涘噯纭殑璇婃柇鏁版嵁 - **璇存槑**: - 娣诲姞浜嗗叏闈㈢殑杩斿洖鍊艰皟璇曟敮鎸? - 绠€鍖栦簡杩斿洖鍊煎鐞嗛€昏緫 - 涓洪棶棰樼殑鏈€缁堣В鍐虫彁渚涗簡蹇呰鐨勮瘖鏂俊鎭? ### 鏈€缁堜慨澶?SetupAutoStartup.ps1 鏁扮粍杩斿洖鍊奸棶棰?- **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 淇 PowerShell 鍑芥暟杩斿洖鏁扮粍瀵艰嚧鐨勬潯浠跺垽鏂け璐ラ棶棰?- **闂鏍规簮**: 鍑芥暟杩斿洖浜嗗寘鍚?`MSFT_ScheduledTask` 瀵硅薄鍜?`0` 鍊肩殑鏁扮粍锛屽鑷?`if ($result -eq 0)` 鍒ゆ柇澶辫触 - **璋冭瘯鍙戠幇**: - 杩斿洖鍊硷細`MSFT_ScheduledTask (TaskName = "WSL-Superset-AutoStart", TaskPath = "\WSL-Containers\") 0` - 杩斿洖鍊肩被鍨嬶細`Object[]`锛堟暟缁勶級 - 姣旇緝缁撴灉锛歚$result -eq 0` 杩斿洖 `0`锛屼絾 `if ($result -eq 0)` 浠嶇劧澶辫触 - **淇敼鏂囦欢**: - `SetupAutoStartup.ps1` - 淇鏁扮粍杩斿洖鍊奸棶棰?- **瑙e喅鏂规**: - 浣跨敤 `$null = $createdTask` 鎶戝埗瀵硅薄杈撳嚭 - 纭繚鍑芥暟鍙繑鍥炰竴涓槑纭殑鏁板€? - 閬垮厤 PowerShell 灏嗗璞″拰鏁板€肩粍鍚堟垚鏁扮粍杩斿洖 - **淇敼浠g爜**: ```powershell # 纭繚鍙繑鍥炰竴涓€硷紝閬垮厤鏁扮粍杩斿洖鍊? $null = $createdTask # 鎶戝埗瀵硅薄杈撳嚭 return 0 ``` - **鎶€鏈師鐞?*: - PowerShell 鍑芥暟浼氬皢鎵€鏈夎緭鍑洪兘浣滀负杩斿洖鍊肩殑涓€閮ㄥ垎 - `$createdTask` 瀵硅薄琚嚜鍔ㄨ緭鍑猴紝涓?`return 0` 缁勫悎鎴愭暟缁? - 浣跨敤 `$null = $createdTask` 鎶戝埗瀵硅薄杈撳嚭锛屽彧淇濈暀 `return 0` - **鏁堟灉**: - 淇浜嗘暟缁勮繑鍥炲€煎鑷寸殑鏉′欢鍒ゆ柇澶辫触闂 - 纭繚鍑芥暟鍙繑鍥炰竴涓槑纭殑鏁板€? - 鎻愪緵姝g‘鐨勬垚鍔?澶辫触鐘舵€佸弽棣?- **璇存槑**: - 褰诲簳瑙e喅浜?PowerShell 鏁扮粍杩斿洖鍊肩殑鎶€鏈棶棰? - 纭繚浜嗚剼鏈€昏緫鐨勬纭€у拰鍙潬鎬? - 瀹屾垚浜嗚嚜鍚姩閰嶇疆鑴氭湰鐨勬渶缁堜慨澶? ### 褰诲簳淇 SetupAutoStartup.ps1 瀵硅薄杈撳嚭闂 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 褰诲簳瑙e喅 PowerShell 瀵硅薄杈撳嚭瀵艰嚧鐨勬暟缁勮繑鍥炲€奸棶棰?- **闂**: 鍗充娇浣跨敤 `$null = $createdTask` 鍜?`$createdTask | Out-Null`锛屽璞′粛鐒惰杈撳嚭鍒拌繑鍥炲€间腑 - **鏍规湰鍘熷洜**: `Get-ScheduledTask` 鍛戒护鐨勫璞¤緭鍑烘棤娉曞畬鍏ㄦ姂鍒讹紝瀵艰嚧杩斿洖鍊间粛鐒舵槸鏁扮粍 - **淇敼鏂囦欢**: - `SetupAutoStartup.ps1` - 閲嶆瀯浠诲姟楠岃瘉閫昏緫锛岄伩鍏嶅璞¤緭鍑?- **瑙e喅鏂规**: - 閲嶆瀯浠诲姟楠岃瘉閫昏緫锛屼娇鐢ㄥ竷灏斿€艰€屼笉鏄璞? - 浣跨敤 try-catch 鍧楁鏌ヤ换鍔℃槸鍚﹀瓨鍦? - 閬垮厤鍦ㄥ嚱鏁颁腑杈撳嚭浠讳綍瀵硅薄锛屽彧杩斿洖鏁板€?- **淇敼浠g爜**: ```powershell # 楠岃瘉浠诲姟鍒涘缓 $taskExists = $false try { $null = Get-ScheduledTask -TaskName $taskName -ErrorAction Stop $taskExists = $true } catch { $taskExists = $false } if ($taskExists) { # 鍙緭鍑哄瓧绗︿覆淇℃伅锛屼笉杈撳嚭瀵硅薄 return 0 } ``` - **鎶€鏈敼杩?*: - 浣跨敤甯冨皵鍊?`$taskExists` 鑰屼笉鏄璞?`$createdTask` - 鍦?try-catch 涓娇鐢?`$null = Get-ScheduledTask` 鎶戝埗杈撳嚭 - 绠€鍖栨垚鍔熷垎鏀殑杈撳嚭锛屽彧鏄剧ず瀛楃涓蹭俊鎭? - 纭繚鍑芥暟鍙繑鍥炴暟鍊硷紝涓嶈繑鍥炰换浣曞璞?- **鏁堟灉**: - 褰诲簳瑙e喅浜嗗璞¤緭鍑哄鑷寸殑鏁扮粍杩斿洖鍊奸棶棰? - 纭繚鍑芥暟鍙繑鍥炰竴涓槑纭殑鏁板€? - 鎻愪緵姝g‘鐨勬垚鍔?澶辫触鐘舵€佸弽棣?- **璇存槑**: - 閫氳繃閲嶆瀯楠岃瘉閫昏緫褰诲簳瑙e喅浜?PowerShell 瀵硅薄杈撳嚭闂 - 纭繚浜嗚剼鏈€昏緫鐨勬纭€у拰鍙潬鎬? - 瀹屾垚浜嗚嚜鍚姩閰嶇疆鑴氭湰鐨勬渶缁堜慨澶? ### 鏈€缁堜慨澶?SetupAutoStartup.ps1 Register-ScheduledTask 瀵硅薄杈撳嚭 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 淇 `Register-ScheduledTask` 鍛戒护鐨勫璞¤緭鍑洪棶棰?- **闂**: 鍗充娇淇浜嗛獙璇侀€昏緫锛宍Register-ScheduledTask` 鍛戒护鏈韩涔熶細杩斿洖瀵硅薄锛屽鑷存暟缁勮繑鍥炲€?- **鏍规湰鍘熷洜**: `Register-ScheduledTask` 鍛戒护杩斿洖 `MSFT_ScheduledTask` 瀵硅薄锛屼笌 `return 0` 缁勫悎鎴愭暟缁?- **淇敼鏂囦欢**: - `SetupAutoStartup.ps1` - 鎶戝埗 `Register-ScheduledTask` 鐨勫璞¤緭鍑?- **瑙e喅鏂规**: - 浣跨敤 `$null = Register-ScheduledTask` 鎶戝埗鍛戒护鐨勫璞¤緭鍑? - 纭繚鍙湁 `return 0` 琚繑鍥烇紝涓嶅寘鍚换浣曞璞?- **淇敼浠g爜**: ```powershell # 娉ㄥ唽浠诲姟 $null = Register-ScheduledTask -TaskName $taskName -Action $action -Trigger $trigger -Settings $settings -Principal $principal -Description $taskDescription -TaskPath $taskPath ``` - **鎶€鏈師鐞?*: - `Register-ScheduledTask` 鍛戒护杩斿洖鍒涘缓鐨?`MSFT_ScheduledTask` 瀵硅薄 - 濡傛灉涓嶆姂鍒惰繖涓緭鍑猴紝瀹冧細涓?`return 0` 缁勫悎鎴愭暟缁? - 浣跨敤 `$null =` 瀹屽叏鎶戝埗瀵硅薄杈撳嚭 - **鏁堟灉**: - 褰诲簳瑙e喅浜嗘墍鏈夊璞¤緭鍑哄鑷寸殑鏁扮粍杩斿洖鍊奸棶棰? - 纭繚鍑芥暟鍙繑鍥炰竴涓槑纭殑鏁板€? - 鎻愪緵姝g‘鐨勬垚鍔?澶辫触鐘舵€佸弽棣?- **璇存槑**: - 杩欐槸鏈€鍚庝竴涓鑷村璞¤緭鍑虹殑婧愬ご - 淇鍚庤剼鏈簲璇ヨ兘姝g‘鏄剧ず鎴愬姛淇℃伅 - 瀹屾垚浜嗚嚜鍚姩閰嶇疆鑴氭湰鐨勬渶缁堜慨澶? ### 淇 startup-superset.bat WSL 鍙戣鐗堟鏌ラ棶棰?- **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 淇鎵瑰鐞嗚剼鏈腑 WSL 鍙戣鐗堟鏌ュけ璐ョ殑闂 - **闂**: 鑴氭湰鏃犳硶姝g‘璇嗗埆 Ubuntu-22.04 鍙戣鐗堬紝鍗充娇璇ュ彂琛岀増瀛樺湪 - **閿欒淇℃伅**: `ERROR: Ubuntu-22.04 distribution not found` - **鏍规湰鍘熷洜**: `findstr` 鍛戒护鐨勫尮閰嶉€昏緫闂锛岄渶瑕佷娇鐢?`/C:` 鍙傛暟杩涜绮剧‘鍖归厤 - **淇敼鏂囦欢**: - `startup-superset.bat` - 淇 WSL 鍙戣鐗堟鏌ラ€昏緫 - **瑙e喅鏂规**: - 浣跨敤 `findstr /C:"Ubuntu-22.04"` 杩涜绮剧‘瀛楃涓插尮閰? - 閬垮厤閮ㄥ垎鍖归厤瀵艰嚧鐨勮鍒?- **淇敼浠g爜**: ```batch REM 妫€鏌buntu-22.04鍙戣鐗堟槸鍚﹀瓨鍦? wsl -l -v | findstr /C:"Ubuntu-22.04" >nul 2>&1 ``` - **鎶€鏈師鐞?*: - `/C:` 鍙傛暟鍛婅瘔 findstr 灏嗘悳绱㈠瓧绗︿覆瑙嗕负鍗曚釜瀛楃涓? - 閬垮厤灏?"Ubuntu-22.04" 涓殑杩炲瓧绗﹁瑙i噴涓鸿寖鍥存搷浣滅 - 纭繚绮剧‘鍖归厤鍙戣鐗堝悕绉?- **鏁堟灉**: - 淇浜?WSL 鍙戣鐗堟鏌ュけ璐ョ殑闂 - 纭繚鑴氭湰鑳芥纭瘑鍒?Ubuntu-22.04 鍙戣鐗? - 鍏佽鑴氭湰缁х画鎵ц Docker 瀹瑰櫒閲嶅惎鎿嶄綔 - **璇存槑**: - 瑙e喅浜?WSL 鍙戣鐗堟鏌ョ殑鎶€鏈棶棰? - 纭繚浜嗚剼鏈殑鍙潬鎬у拰姝g‘鎬? - 涓?Docker 瀹瑰櫒鑷惎鍔ㄥ姛鑳芥彁渚涗簡绋冲畾鐨勫熀纭€ ### 杩涗竴姝ヤ慨澶?startup-superset.bat WSL 鍙戣鐗堟鏌?- **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 鏀硅繘 WSL 鍙戣鐗堟鏌ユ柟娉曪紝浣跨敤鐩存帴娴嬭瘯鑰屼笉鏄枃鏈尮閰?- **闂**: 鍗充娇浣跨敤 `/C:` 鍙傛暟锛宍findstr` 浠嶇劧鏃犳硶姝g‘鍖归厤鍖呭惈 `*` 绗﹀彿鐨?WSL 杈撳嚭 - **鏍规湰鍘熷洜**: WSL 杈撳嚭鏍煎紡涓粯璁ゅ彂琛岀増鍓嶉潰鏈?`*` 绗﹀彿锛屽鑷存枃鏈尮閰嶅鏉傚寲 - **淇敼鏂囦欢**: - `startup-superset.bat` - 鏀硅繘 WSL 鍙戣鐗堟鏌ラ€昏緫 - **瑙e喅鏂规**: - 浣跨敤 `wsl -d Ubuntu-22.04 -- echo "WSL test"` 鐩存帴娴嬭瘯鍙戣鐗堟槸鍚﹀彲璁块棶 - 閬垮厤渚濊禆鏂囨湰鍖归厤锛岀洿鎺ユ祴璇?WSL 鍛戒护鏄惁宸ヤ綔 - 鎻愪緵鏇村噯纭殑閿欒淇℃伅 - **淇敼浠g爜**: ```batch REM 妫€鏌buntu-22.04鍙戣鐗堟槸鍚﹀瓨鍦? wsl -d Ubuntu-22.04 -- echo "WSL test" >nul 2>&1 if %errorlevel% neq 0 ( echo [%date% %time%] ERROR: Ubuntu-22.04 distribution not accessible ) else ( echo [%date% %time%] Ubuntu-22.04 distribution is accessible ) ``` - **鎶€鏈紭鍔?*: - 鐩存帴娴嬭瘯 WSL 鍙戣鐗堟槸鍚﹀彲璁块棶锛屼笉渚濊禆鏂囨湰瑙f瀽 - 閬垮厤 WSL 杈撳嚭鏍煎紡鍙樺寲瀵艰嚧鐨勫尮閰嶉棶棰? - 鎻愪緵鏇村噯纭殑閿欒璇婃柇淇℃伅 - **鏁堟灉**: - 淇浜?WSL 鍙戣鐗堟鏌ョ殑鍙潬鎬ч棶棰? - 纭繚鑴氭湰鑳芥纭瘑鍒彲璁块棶鐨?Ubuntu-22.04 鍙戣鐗? - 鎻愪緵鏇村噯纭殑閿欒淇℃伅鐢ㄤ簬闂璇婃柇 - **璇存槑**: - 閫氳繃鐩存帴娴嬭瘯鏂规硶褰诲簳瑙e喅浜?WSL 鍙戣鐗堟鏌ラ棶棰? - 鎻愰珮浜嗚剼鏈殑鍙潬鎬у拰鍋ュ.鎬? - 涓?Docker 瀹瑰櫒鑷惎鍔ㄥ姛鑳芥彁渚涗簡绋冲畾鐨勫熀纭€ ### 淇 startup-superset.bat 鍛戒护寮曞彿闂 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 淇 WSL 鍛戒护涓殑寮曞彿闂锛岀‘淇濆懡浠ゆ纭紶閫掑埌 WSL 鍐呴儴 - **闂**: `grep` 鍛戒护鏃犳硶鍦?WSL 鍐呴儴姝g‘鎵ц锛屾樉绀?"'grep' is not recognized as an internal or external command" - **鏍规湰鍘熷洜**: 鎵瑰鐞嗘枃浠朵腑鐨勫崟寮曞彿瀵艰嚧鍛戒护娌℃湁姝g‘浼犻€掑埌 WSL 鍐呴儴鐨?bash - **淇敼鏂囦欢**: - `startup-superset.bat` - 淇 WSL 鍛戒护鐨勫紩鍙烽棶棰?- **瑙e喅鏂规**: - 灏嗗崟寮曞彿鏀逛负鍙屽紩鍙凤細`'docker ps | grep superset'` 鈫?`"docker ps | grep superset"` - 纭繚鍛戒护姝g‘浼犻€掑埌 WSL 鍐呴儴鐨?bash 鐜 - **淇敼浠g爜**: ```batch REM 妫€鏌ュ懡浠ゆ墽琛岀粨鏋? wsl.exe -d Ubuntu-22.04 --user root -- bash -c "docker ps | grep superset" ``` - **鎶€鏈師鐞?*: - 鍦?Windows 鎵瑰鐞嗘枃浠朵腑锛屽崟寮曞彿涓嶄細姝g‘浼犻€掔粰 WSL - 鍙屽紩鍙风‘淇濆懡浠ゅ瓧绗︿覆姝g‘浼犻€掑埌 WSL 鍐呴儴鐨?bash - 杩欐牱 grep 鍛戒护灏辫兘鍦?Linux 鐜涓纭墽琛?- **鏁堟灉**: - 淇浜嗗鍣ㄧ姸鎬佹鏌ュ懡浠ょ殑鎵ц闂 - 纭繚 grep 鍛戒护鑳藉湪 WSL 鍐呴儴姝g‘宸ヤ綔 - 鎻愪緵瀹屾暣鐨勫鍣ㄧ姸鎬佷俊鎭?- **璇存槑**: - 瑙e喅浜?WSL 鍛戒护浼犻€掔殑鎶€鏈棶棰? - 纭繚浜嗚剼鏈殑瀹屾暣鍔熻兘鍜屽彲闈犳€? - 涓?Docker 瀹瑰櫒绠$悊鎻愪緵浜嗗畬鏁寸殑鐩戞帶鍔熻兘 ### 淇 startup-superset.bat Docker 瀹瑰櫒閫€鍑洪棶棰?- **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 淇鑴氭湰閫€鍑烘椂 Docker 瀹瑰櫒涔熼€€鍑虹殑闂 - **闂**: 鎵嬪姩鎵ц鑴氭湰鎴愬姛鍚庯紝褰撹剼鏈€€鍑烘椂 Docker 瀹瑰櫒涔熶細鍋滄杩愯 - **鏍规湰鍘熷洜**: 鑴氭湰鍚姩鐨?WSL 浼氳瘽缁撴潫鍚庯紝Docker 瀹瑰櫒娌℃湁鎸佷箙鍖栬繍琛屾満鍒?- **淇敼鏂囦欢**: - `startup-superset.bat` - 娣诲姞 Docker 瀹瑰櫒鎸佷箙鍖栬繍琛屾満鍒?- **瑙e喅鏂规**: - 娣诲姞 `docker update --restart=unless-stopped superset` 纭繚瀹瑰櫒鑷姩閲嶅惎 - 娣诲姞鐢ㄦ埛鎻愮ず淇℃伅锛岃鏄庡浣曢獙璇佸鍣ㄧ姸鎬? - 鎻愪緵瀹瑰櫒鐘舵€佹鏌ュ懡浠?- **淇敼浠g爜**: ```batch REM 鎵цWSL鍛戒护 wsl.exe -d Ubuntu-22.04 --user root -- bash -c 'docker restart superset && docker update --restart=unless-stopped superset' echo [%date% %time%] Note: Docker container should continue running in WSL echo [%date% %time%] To verify container status, run: wsl -d Ubuntu-22.04 -- docker ps ``` - **鎶€鏈師鐞?*: - `--restart=unless-stopped` 绛栫暐纭繚瀹瑰櫒鍦ㄧ郴缁熼噸鍚垨鎰忓鍋滄鏃惰嚜鍔ㄩ噸鍚? - 瀹瑰櫒鐜板湪鐙珛浜庤剼鏈細璇濊繍琛岋紝涓嶄細鍥犱负鑴氭湰閫€鍑鸿€屽仠姝? - 鎻愪緵楠岃瘉鍛戒护璁╃敤鎴风‘璁ゅ鍣ㄧ姸鎬?- **鏁堟灉**: - 淇浜嗚剼鏈€€鍑烘椂瀹瑰櫒鍋滄鐨勯棶棰? - 纭繚 Docker 瀹瑰櫒鍦ㄥ悗鍙版寔缁繍琛? - 鎻愪緵鐢ㄦ埛鍙嬪ソ鐨勭姸鎬侀獙璇佹柟娉?- **璇存槑**: - 瑙e喅浜?Docker 瀹瑰櫒鎸佷箙鍖栬繍琛岀殑鎶€鏈棶棰? - 纭繚浜嗗鍣ㄦ湇鍔$殑杩炵画鎬у拰鍙潬鎬? - 涓虹敓浜х幆澧冩彁渚涗簡绋冲畾鐨勫鍣ㄧ鐞嗘柟妗? ### 淇 startup-superset.bat 寮曞彿璇硶閿欒 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 淇 WSL 鍛戒护涓殑寮曞彿璇硶閿欒 - **闂**: 鑴氭湰鎵ц鏃跺嚭鐜?"unexpected EOF while looking for matching `''`" 鍜?"syntax error: unexpected end of file" 閿欒 - **鏍规湰鍘熷洜**: 鎵瑰鐞嗘枃浠朵腑鐨勫崟寮曞彿涓庡弻寮曞彿娣峰悎浣跨敤瀵艰嚧寮曞彿鍖归厤閿欒 - **淇敼鏂囦欢**: - `startup-superset.bat` - 淇寮曞彿璇硶闂 - **瑙e喅鏂规**: - 灏嗗崟寮曞彿鏀逛负鍙屽紩鍙凤細`'docker restart superset && docker update --restart=unless-stopped superset'` 鈫?`"docker restart superset && docker update --restart=unless-stopped superset"` - 纭繚鍛戒护鏄剧ず淇℃伅涓庡疄闄呮墽琛屽懡浠や竴鑷?- **淇敼浠g爜**: ```batch echo [%date% %time%] Command: wsl.exe -d Ubuntu-22.04 --user root -- bash -c "docker restart superset && docker update --restart=unless-stopped superset" wsl.exe -d Ubuntu-22.04 --user root -- bash -c "docker restart superset && docker update --restart=unless-stopped superset" ``` - **鎶€鏈師鐞?*: - 鍦?Windows 鎵瑰鐞嗘枃浠朵腑锛屽崟寮曞彿涓嶄細姝g‘浼犻€掔粰 WSL - 鍙屽紩鍙风‘淇濆懡浠ゅ瓧绗︿覆姝g‘浼犻€掑埌 WSL 鍐呴儴鐨?bash - 閬垮厤寮曞彿鍖归厤閿欒瀵艰嚧鐨勮娉曢棶棰?- **鏁堟灉**: - 淇浜嗗紩鍙疯娉曢敊璇鑷寸殑鍛戒护鎵ц澶辫触 - 纭繚 Docker 瀹瑰櫒閲嶅惎鍜岄噸鍚瓥鐣ヨ缃懡浠ゆ纭墽琛? - 鎻愪緵鍑嗙‘鐨勫懡浠ゆ樉绀轰俊鎭?- **璇存槑**: - 瑙e喅浜嗘壒澶勭悊鏂囦欢寮曞彿澶勭悊鐨勬妧鏈棶棰? - 纭繚浜嗚剼鏈殑璇硶姝g‘鎬у拰鎵ц鍙潬鎬? - 涓?Docker 瀹瑰櫒绠$悊鎻愪緵浜嗙ǔ瀹氱殑鍛戒护鎵ц鐜 ### 淇 WSL-Superset 鑷惎鍔ㄩ棶棰?- **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 淇 WSL-Superset 鍦ㄧ郴缁熷惎鍔ㄦ椂鎰忓缁堟鐨勯棶棰橈紙閿欒浠g爜 0x8007042B锛?- **闂**: 鎵嬪姩杩愯 startup-superset.bat 姝e父锛屼絾绯荤粺鍚姩鏃惰嚜鍔ㄨ繍琛屽け璐ワ紝杩涚▼鎰忓缁堟 - **鏍规湰鍘熷洜**: - 绯荤粺鍚姩鏃?WSL 鏈嶅姟鍙兘杩樻湭瀹屽叏灏辩华 - 浠诲姟璁″垝绋嬪簭閰嶇疆缂哄皯閫傚綋鐨勫欢杩熷拰閲嶈瘯鏈哄埗 - 缂哄皯瀵圭郴缁熸湇鍔″惎鍔ㄦ椂鏈虹殑鑰冭檻 - **淇敼鏂囦欢**: - `startup-superset.bat` - 鍗囩骇鍒?v2.0锛屽鍔犻噸璇曟満鍒跺拰绯荤粺鏈嶅姟绛夊緟 - `SetupAutoStartup.ps1` - 澧炲姞鍚姩寤惰繜鍜岄敊璇鐞嗛厤缃? - `FixAutoStartup.ps1` - 鏂板缓淇鑴氭湰锛屼笓闂ㄨВ鍐宠嚜鍚姩闂 - **涓昏鏀硅繘**: - **绯荤粺鏈嶅姟绛夊緟**: 鑴氭湰寮€濮嬫椂绛夊緟30绉掞紝纭繚绯荤粺鏈嶅姟瀹屽叏鍚姩 - **WSL 鍙戣鐗堟鏌ラ噸璇?*: 鏈€澶氶噸璇?娆★紝姣忔闂撮殧10绉? - **Docker 瀹瑰櫒閲嶅惎閲嶈瘯**: 鏈€澶氶噸璇?娆★紝姣忔闂撮殧15绉? - **浠诲姟璁″垝绋嬪簭寤惰繜**: 鐢ㄦ埛鐧诲綍鍚庡欢杩?鍒嗛挓鎵ц浠诲姟 - **澧炲己閿欒澶勭悊**: 璁剧疆10鍒嗛挓鎵ц鏃堕棿闄愬埗锛?娆¢噸鍚皾璇曪紝5鍒嗛挓閲嶅惎闂撮殧 - **璇︾粏鏃ュ織璁板綍**: 璁板綍姣忎釜姝ラ鐨勬墽琛岀姸鎬佸拰閿欒淇℃伅 - **鎶€鏈壒鎬?*: - 浣跨敤 `timeout /t 30 /nobreak` 绛夊緟绯荤粺鏈嶅姟灏辩华 - 浣跨敤 `goto` 鍜岄噸璇曡鏁板櫒瀹炵幇閲嶈瘯鏈哄埗 - 浣跨敤 `PT3M` 寤惰繜纭繚 WSL 鏈嶅姟瀹屽叏鍚姩 - 浣跨敤 `-ExecutionTimeLimit` 闃叉浠诲姟鏃犻檺鏈熻繍琛? - 浣跨敤 `-RestartCount` 鍜?`-RestartInterval` 瀹炵幇鑷姩閲嶈瘯 - **閿欒浠g爜澶勭悊**: - 閿欒浠g爜 1: WSL 鏈畨瑁呮垨涓嶅彲鐢? - 閿欒浠g爜 2: Ubuntu-22.04 鍙戣鐗堜笉鍙闂? - 閿欒浠g爜 3: Docker 瀹瑰櫒閲嶅惎澶辫触 - 鎴愬姛浠g爜 0: 鑴氭湰鎵ц鎴愬姛 - **浣跨敤璇存槑**: 1. 杩愯 `FixAutoStartup.ps1` 閲嶆柊閰嶇疆鑷惎鍔ㄤ换鍔? 2. 鑴氭湰浼氳嚜鍔ㄥ垹闄ょ幇鏈変换鍔″苟鍒涘缓鏂扮殑澧炲己閰嶇疆 3. 鏂伴厤缃寘鍚敤鎴风櫥褰曞悗3鍒嗛挓鍚姩寤惰繜鍜屽畬鏁寸殑閿欒澶勭悊鏈哄埗 - **棰勬湡鏁堟灉**: - 瑙e喅鐢ㄦ埛鐧诲綍鍚?WSL-Superset 杩涚▼鎰忓缁堟鐨勯棶棰? - 鎻愪緵鏇村彲闈犵殑鑷惎鍔ㄦ満鍒? - 澧炲己閿欒鎭㈠鑳藉姏 - 鎻愪緵璇︾粏鐨勬墽琛屾棩蹇楃敤浜庨棶棰樿瘖鏂?- **璇存槑**: - 褰诲簳瑙e喅浜?WSL-Superset 鑷惎鍔ㄧ殑鎶€鏈棶棰? - 鎻愪緵浜嗗畬鏁寸殑閿欒澶勭悊鍜岄噸璇曟満鍒? - 纭繚浜嗙敤鎴风櫥褰曞悗 Docker 瀹瑰櫒鐨勫彲闈犲惎鍔? - 涓虹敓浜х幆澧冩彁渚涗簡绋冲畾鐨勮嚜鍚姩瑙e喅鏂规 ### 淇 PowerShell LogonType 鏋氫妇閿欒 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 淇 PowerShell 鑴氭湰涓?LogonType 鍙傛暟鏋氫妇鍊奸敊璇?- **闂**: 浣跨敤 `InteractiveToken` 浣滀负 LogonType 鍙傛暟鍊硷紝浣嗚鍊间笉鏄湁鏁堢殑鏋氫妇鍊?- **閿欒淇℃伅**: "鏃犳硶灏嗘爣璇嗙鍚嶇О InteractiveToken 涓庢湁鏁堢殑鏋氫妇鍣ㄥ悕绉扮浉鍖归厤" - **淇敼鏂囦欢**: - `FixAutoStartup.ps1` - 淇 LogonType 鍙傛暟鍊? - `SetupAutoStartup.ps1` - 淇 LogonType 鍙傛暟鍊?- **瑙e喅鏂规**: - 灏?`-LogonType InteractiveToken` 鏀逛负 `-LogonType Interactive` - 浣跨敤姝g‘鐨?PowerShell 鏋氫妇鍊?- **鏈夋晥鏋氫妇鍊?*: - None, Password, S4U, Interactive, Group, ServiceAccount, InteractiveOrPassword - 閫夋嫨 `Interactive` 浣滀负鐢ㄦ埛鐧诲綍绫诲瀷 - **鎶€鏈師鐞?*: - PowerShell 鐨?ScheduledTask 妯″潡鏈夌壒瀹氱殑鏋氫妇鍊艰姹? - `Interactive` 绫诲瀷閫傚悎鐢ㄦ埛鐧诲綍鍚庢墽琛岀殑浠诲姟 - 纭繚浠诲姟鑳藉浠ュ綋鍓嶇敤鎴疯韩浠芥纭繍琛?- **鏁堟灉**: - 淇浜?PowerShell 鑴氭湰鎵ц鏃剁殑鍙傛暟閿欒 - 纭繚浠诲姟璁″垝绋嬪簭鑳藉姝g‘鍒涘缓浠诲姟 - 鎻愪緵姝g‘鐨勭敤鎴疯韩浠介獙璇佹満鍒?- **璇存槑**: - 瑙e喅浜?PowerShell 鏋氫妇鍊肩殑鎶€鏈棶棰? - 纭繚浜嗚剼鏈殑姝g‘鎵ц鍜屼换鍔″垱寤? - 涓鸿嚜鍚姩閰嶇疆鎻愪緵浜嗙ǔ瀹氱殑鎶€鏈熀纭€ ### 鍒嗘瀽 startup-superset.bat v2.0 鑴氭湰鍔熻兘 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **鍒嗘瀽鍐呭**: 鍒嗘瀽 startup-superset.bat v2.0 鑴氭湰鐨勫姛鑳藉拰鐗圭偣 - **鑴氭湰鐗堟湰**: v2.0 - 淇鑷惎鍔ㄩ棶棰?- **涓昏鍔熻兘**: - **鑷姩鍚姩WSL**骞堕噸鍚疭uperset Docker瀹瑰櫒 - **澧炲己閿欒澶勭悊**鏈哄埗锛屽寘鍚噸璇曢€昏緫 - **绯荤粺鏈嶅姟绛夊緟**锛岀‘淇濆惎鍔ㄦ椂鏈烘纭? - **璇︾粏鏃ュ織璁板綍**锛屼究浜庨棶棰樿瘖鏂?- **鎶€鏈壒鎬?*: - **鑷惎鍔ㄦā寮忓寮洪敊璇鐞?*: 绛夊緟30绉掔‘淇濈郴缁熸湇鍔″畬鍏ㄥ惎鍔? - **WSL鐜妫€鏌ヤ笌閲嶈瘯鏈哄埗**: 妫€鏌SL瀹夎鍜孶buntu-22.04鍙戣鐗堬紙鏈€澶氶噸璇?娆★級 - **Docker瀹瑰櫒绠$悊閲嶈瘯**: 閲嶅惎Superset瀹瑰櫒锛堟渶澶氶噸璇?娆★級锛岃缃嚜鍔ㄩ噸鍚瓥鐣? - **閿欒浠g爜绯荤粺**: 1-WSL鏈畨瑁咃紝2-鍙戣鐗堜笉鍙闂紝3-瀹瑰櫒閲嶅惎澶辫触锛?-鎴愬姛 - **鎵ц娴佺▼**: 1. 绯荤粺鏈嶅姟绛夊緟 (30绉? 2. WSL瀹夎妫€鏌? 3. 鍙戣鐗堥獙璇?(閲嶈瘯鏈哄埗) 4. Docker瀹瑰櫒閲嶅惎 (閲嶈瘯鏈哄埗) 5. 鐘舵€侀獙璇佸拰鏃ュ織杈撳嚭 - **鍏抽敭鍛戒护**: ```batch wsl.exe -d Ubuntu-22.04 --user root -- bash -c "docker restart superset && docker update --restart=unless-stopped superset" ``` - **璁捐鐩殑**: 涓撻棬涓鸿В鍐砏SL-Superset鑷惎鍔ㄩ棶棰樿€岃璁★紝鍖呭惈瀹屾暣鐨勯敊璇鐞嗗拰閲嶈瘯鏈哄埗 - **璇存槑**: - 杩欐槸涓撻棬涓鸿В鍐崇郴缁熷惎鍔ㄦ椂WSL-Superset杩涚▼鎰忓缁堟闂鑰岃璁$殑澧炲己鐗堟湰 - 鎻愪緵浜嗗彲闈犵殑鑷惎鍔ㄦ満鍒跺拰瀹屾暣鐨勯敊璇仮澶嶈兘鍔? - 涓虹敓浜х幆澧冩彁渚涗簡绋冲畾鐨凞ocker瀹瑰櫒绠$悊瑙e喅鏂规 ### 淇 startup-superset.bat WSL鍛戒护璁块棶闂 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 淇WSL鍛戒护璁块棶闂锛岃В鍐?Ubuntu-22.04 distribution not accessible"閿欒 - **闂**: 铏界劧WSL鏄剧ずUbuntu-22.04姝e湪杩愯锛屼絾鑴氭湰鏃犳硶璁块棶璇ュ彂琛岀増 - **閿欒鐜拌薄**: - WSL鐘舵€佹樉绀? `* Ubuntu-22.04 Running 2` - 鑴氭湰閿欒: `ERROR: Ubuntu-22.04 distribution not accessible after 3 attempts` - 閿欒浠g爜: 2 - **鏍规湰鍘熷洜**: WSL鍛戒护鏍煎紡闂锛宍wsl.exe` 鍜?`wsl` 鍛戒护鐨勫樊寮?- **淇敼鏂囦欢**: - `startup-superset.bat` - 鍗囩骇鍒皏2.1锛屼慨澶峎SL鍛戒护鏍煎紡 - **瑙e喅鏂规**: - 灏嗘墍鏈?`wsl.exe` 鍛戒护鏀逛负 `wsl` 鍛戒护 - 绠€鍖朩SL鍙戣鐗堟鏌ラ€昏緫锛岀Щ闄ゅ鏉傜殑娴嬭瘯浠g爜 - 缁熶竴浣跨敤 `wsl -d Ubuntu-22.04` 鏍煎紡 - **淇敼鍐呭**: - 鐗堟湰鍙? v2.0 鈫?v2.1 - WSL妫€鏌ュ懡浠? `wsl -d Ubuntu-22.04 echo "WSL test"` - Docker鍛戒护: `wsl -d Ubuntu-22.04 --user root -- bash -c "..."` - 鐘舵€佹鏌? `wsl -d Ubuntu-22.04 --user root -- bash -c "docker ps | grep superset"` - **鎶€鏈敼杩?*: - 浣跨敤鏍囧噯鐨?`wsl` 鍛戒护鑰屼笉鏄?`wsl.exe` - 淇濇寔绠€娲佺殑閿欒澶勭悊閫昏緫 - 绉婚櫎涓嶅繀瑕佺殑璋冭瘯浠g爜 - **棰勬湡鏁堟灉**: - 瑙e喅WSL鍙戣鐗堣闂棶棰? - 纭繚鑴氭湰鑳芥纭墽琛孌ocker瀹瑰櫒绠$悊鍛戒护 - 鎻愪緵鏇寸ǔ瀹氱殑鑷惎鍔ㄥ姛鑳?- **璇存槑**: - 淇浜哤SL鍛戒护鏍煎紡瀵艰嚧鐨勬妧鏈棶棰? - 绠€鍖栦簡鑴氭湰閫昏緫锛屾彁楂樹簡鍙潬鎬? - 涓篋ocker瀹瑰櫒鑷惎鍔ㄦ彁渚涗簡绋冲畾鐨勮В鍐虫柟妗? ### 杩涗竴姝ヤ慨澶?startup-superset.bat WSL鍛戒护璇硶闂 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 杩涗竴姝ヤ慨澶峎SL鍛戒护璇硶闂锛岃В鍐冲紩鍙峰拰鍙傛暟浼犻€掗棶棰?- **闂**: v2.1淇鍚庝粛鐒跺嚭鐜?Ubuntu-22.04 distribution not accessible"閿欒 - **鐢ㄦ埛鍙嶉**: "娌℃湁閲嶈瘯涔嬪墠濂藉ソ鐨?锛岃鏄庨棶棰樺彲鑳藉湪浜庡懡浠よ娉?- **閿欒鐜拌薄**: - 浠嶇劧鏄剧ず: `ERROR: Ubuntu-22.04 distribution not accessible after 3 attempts` - WSL鐘舵€佹甯? `* Ubuntu-22.04 Running 2` - **鏍规湰鍘熷洜**: WSL鍛戒护鐨勫紩鍙峰拰鍙傛暟浼犻€掕娉曢棶棰?- **淇敼鏂囦欢**: - `startup-superset.bat` - 鍗囩骇鍒皏2.2锛屼慨澶峎SL鍛戒护璇硶 - **瑙e喅鏂规**: - 灏?`wsl -d Ubuntu-22.04 echo "WSL test"` 鏀逛负 `wsl -d Ubuntu-22.04 whoami` - 浣跨敤鏇寸畝鍗曠殑鍛戒护閬垮厤寮曞彿闂 - 娣诲姞璋冭瘯淇℃伅鏄剧ず瀹為檯鎵ц鐨勫懡浠?- **淇敼鍐呭**: - 鐗堟湰鍙? v2.1 鈫?v2.2 - WSL妫€鏌ュ懡浠? `wsl -d Ubuntu-22.04 whoami` (绉婚櫎寮曞彿) - 娣诲姞璋冭瘯杈撳嚭: 鏄剧ず瀹為檯鎵ц鐨刉SL鍛戒护 - 淇濇寔Docker鍛戒护涓嶅彉: `wsl -d Ubuntu-22.04 --user root -- bash -c "..."` - **鎶€鏈敼杩?*: - 浣跨敤 `whoami` 鍛戒护閬垮厤寮曞彿浼犻€掗棶棰? - 娣诲姞璋冭瘯淇℃伅甯姪璇婃柇闂 - 绠€鍖栧懡浠よ娉曪紝鎻愰珮鍏煎鎬?- **棰勬湡鏁堟灉**: - 瑙e喅WSL鍛戒护璇硶瀵艰嚧鐨勮闂棶棰? - 鎻愪緵鏇村ソ鐨勮皟璇曚俊鎭敤浜庨棶棰樿瘖鏂? - 纭繚鑴氭湰鑳芥纭娴媁SL鍙戣鐗?- **璇存槑**: - 閫氳繃绠€鍖栧懡浠よ娉曡В鍐冲紩鍙蜂紶閫掗棶棰? - 娣诲姞璋冭瘯鍔熻兘甯姪鐢ㄦ埛璇婃柇闂 - 涓篧SL鍛戒护鎵ц鎻愪緵鏇寸ǔ瀹氱殑瑙e喅鏂规 ### 鏈€缁堜慨澶?startup-superset.bat WSL鐢ㄦ埛鏉冮檺闂 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 淇WSL妫€鏌ュ懡浠や腑缂哄皯 `--user root` 鍙傛暟鐨勯棶棰?- **闂**: WSL妫€鏌ュ懡浠ょ己灏戠敤鎴锋潈闄愬弬鏁帮紝瀵艰嚧鏃犳硶姝g‘璁块棶鍙戣鐗?- **鐢ㄦ埛鍙嶉**: "灏?--user root"锛屾寚鍑轰簡鍏抽敭闂 - **鏍规湰鍘熷洜**: WSL妫€鏌ュ懡浠や笌Docker鍛戒护鐨勭敤鎴锋潈闄愪笉涓€鑷?- **淇敼鏂囦欢**: - `startup-superset.bat` - 鍗囩骇鍒皏2.3锛屼慨澶峎SL鐢ㄦ埛鏉冮檺闂 - **瑙e喅鏂规**: - 鍦╓SL妫€鏌ュ懡浠や腑娣诲姞 `--user root` 鍙傛暟 - 纭繚妫€鏌ュ懡浠や笌Docker鍛戒护浣跨敤鐩稿悓鐨勭敤鎴锋潈闄?- **淇敼鍐呭**: - 鐗堟湰鍙? v2.2 鈫?v2.3 - WSL妫€鏌ュ懡浠? `wsl -d Ubuntu-22.04 --user root whoami` - 璋冭瘯鍛戒护: `wsl -d Ubuntu-22.04 --user root whoami` - 淇濇寔Docker鍛戒护涓嶅彉: `wsl -d Ubuntu-22.04 --user root -- bash -c "..."` - **鎶€鏈敼杩?*: - 缁熶竴WSL鍛戒护鐨勭敤鎴锋潈闄愬弬鏁? - 纭繚妫€鏌ュ懡浠や笌鎵ц鍛戒护鐨勪竴鑷存€? - 鎻愪緵姝g‘鐨勭敤鎴锋潈闄愯闂?- **棰勬湡鏁堟灉**: - 瑙e喅WSL鐢ㄦ埛鏉冮檺瀵艰嚧鐨勮闂棶棰? - 纭繚鑴氭湰鑳芥纭娴媁SL鍙戣鐗? - 鎻愪緵涓€鑷寸殑鍛戒护鎵ц鐜 - **璇存槑**: - 閫氳繃娣诲姞 `--user root` 鍙傛暟瑙e喅鐢ㄦ埛鏉冮檺闂 - 纭繚浜哤SL鍛戒护鎵ц鐨勪竴鑷存€? - 涓篋ocker瀹瑰櫒绠$悊鎻愪緵浜嗘纭殑鏉冮檺鍩虹 ### 閲嶆瀯 HostBuilder 鏋舵瀯 - 闆嗘垚鍒?AppOnFrameworkInitializationCompleted - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 灏?CreateHostBuilder 閫昏緫浠?Program.cs 闆嗘垚鍒?App.OnFrameworkInitializationCompleted 涓?- **閲嶆瀯鐩爣**: 绠€鍖?Program.cs锛屽皢 HostBuilder 閰嶇疆绉诲埌 App 绫讳腑锛屽疄鐜版洿娓呮櫚鐨勬灦鏋勫垎绂?- **淇敼鏂囦欢**: - `Program.cs` - 瀹屽叏閲嶆瀯锛岀Щ闄?HostBuilder 閰嶇疆锛岀畝鍖栦负鍩烘湰鐨?Avalonia 鍚姩 - `App.axaml.cs` - 閲嶆瀯锛岄泦鎴?HostBuilder 閰嶇疆鍒?OnFrameworkInitializationCompleted 鏂规硶 - **鏋舵瀯鏀硅繘**: - **Program.cs 绠€鍖?*: 绉婚櫎澶嶆潅鐨?HostBuilder 閰嶇疆锛屽彧淇濈暀鍩烘湰鐨?Avalonia 搴旂敤绋嬪簭鍚姩 - **App.cs 澧炲己**: 鍦?OnFrameworkInitializationCompleted 涓垱寤哄拰閰嶇疆 HostBuilder - **渚濊禆娉ㄥ叆闆嗘垚**: 鍦ㄦ鏋跺垵濮嬪寲瀹屾垚鍚庣珛鍗宠缃緷璧栨敞鍏ュ鍣? - **鏈嶅姟鐢熷懡鍛ㄦ湡**: 纭繚 HostBuilder 鍦ㄦ纭殑鏃舵満鍒涘缓鍜岄厤缃?- **鎶€鏈壒鎬?*: - **寤惰繜鍒濆鍖?*: HostBuilder 鍦?Avalonia 妗嗘灦鍒濆鍖栧畬鎴愬悗鍒涘缓 - **鏈嶅姟鎻愪緵绋嬪簭**: 鍦?App 绫讳腑缁存姢 IServiceProvider 瀹炰緥 - **鏃ュ織闆嗘垚**: 鍦?HostBuilder 鍒涘缓鍚庣珛鍗宠幏鍙?ILogger 瀹炰緥 - **MainWindow 鍒涘缓**: 閫氳繃渚濊禆娉ㄥ叆瀹瑰櫒鍒涘缓 MainWindow - **浠g爜缁撴瀯**: - Program.cs: 绠€鍖栦负 27 琛岋紝鍙礋璐e熀鏈殑 Avalonia 鍚姩 - App.axaml.cs: 澧炲姞鍒?85 琛岋紝鍖呭惈瀹屾暣鐨?HostBuilder 閰嶇疆 - 鏃犲弬鏋勯€犲嚱鏁? 娣诲姞鏃犲弬鏋勯€犲嚱鏁颁互鏀寔 Avalonia 妗嗘灦鍒濆鍖?- **閰嶇疆淇濇寔**: - 淇濇寔鎵€鏈夊師鏈夌殑閰嶇疆閫夐」锛圓ppSettings銆佹棩蹇椼€佹湇鍔℃敞鍐岋級 - 淇濇寔 ReactiveUI 闆嗘垚 - 淇濇寔涓氬姟鏈嶅姟鍜?ViewModel 娉ㄥ唽 - **浼樺娍**: - 鏇存竻鏅扮殑鑱岃矗鍒嗙锛歅rogram.cs 璐熻矗鍚姩锛孉pp.cs 璐熻矗閰嶇疆 - 鏇村ソ鐨勭敓鍛藉懆鏈熺鐞嗭細HostBuilder 鍦ㄦ纭殑鏃舵満鍒涘缓 - 鏇寸畝娲佺殑鍚姩娴佺▼锛氬噺灏?Program.cs 鐨勫鏉傛€? - 鏇村ソ鐨勫彲缁存姢鎬э細閰嶇疆閫昏緫闆嗕腑鍦?App 绫讳腑 - **璇存槑**: - 鎴愬姛閲嶆瀯浜?HostBuilder 鏋舵瀯锛屽疄鐜颁簡鏇存竻鏅扮殑浠g爜缁勭粐 - 淇濇寔浜嗘墍鏈夊師鏈夊姛鑳斤紝鍖呮嫭渚濊禆娉ㄥ叆銆侀厤缃鐞嗐€佹棩蹇楄褰? - 鎻愪緵浜嗘洿濂界殑鏋舵瀯鍒嗙鍜屽彲缁存姢鎬? - 涓哄悗缁姛鑳芥墿灞曟彁渚涗簡鏇寸伒娲荤殑鍩虹 ### 瀹炵幇瀵艰埅鏍?+ 鏍囩椤电晫闈㈠竷灞€ - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 瀹炵幇宸︿晶瀵艰埅鏍忋€佸彸渚уご閮ㄥ尯鍩熷拰涓棿鏍囩椤靛唴瀹瑰尯鍩熺殑瀹屾暣鐣岄潰甯冨眬 - **鍔熻兘闇€姹?*: 宸﹁竟鏄鑸爮锛屽彸杈逛笂闈㈡槸Header锛屼腑闂碈enter鍐呭鏄乏杈瑰鑸爮鐐瑰嚮鍑烘潵鐨勫唴瀹箃ab - **淇敼鏂囦欢**: - `ViewModels/NavigationItem.cs` - 鏂板缓瀵艰埅椤规ā鍨嬬被 - `ViewModels/TabItem.cs` - 鏂板缓鏍囩椤甸」妯″瀷绫? - `ViewModels/Pages/DashboardPageViewModel.cs` - 鏂板缓浠〃鏉块〉闈iewModel - `ViewModels/Pages/UsersPageViewModel.cs` - 鏂板缓鐢ㄦ埛绠$悊椤甸潰ViewModel - `ViewModels/Pages/SettingsPageViewModel.cs` - 鏂板缓璁剧疆椤甸潰ViewModel - `Views/Pages/DashboardPageView.axaml` - 鏂板缓浠〃鏉块〉闈㈣鍥? - `Views/Pages/DashboardPageView.axaml.cs` - 鏂板缓浠〃鏉块〉闈㈣鍥句唬鐮? - `Views/Pages/UsersPageView.axaml` - 鏂板缓鐢ㄦ埛绠$悊椤甸潰瑙嗗浘 - `Views/Pages/UsersPageView.axaml.cs` - 鏂板缓鐢ㄦ埛绠$悊椤甸潰瑙嗗浘浠g爜 - `Views/Pages/SettingsPageView.axaml` - 鏂板缓璁剧疆椤甸潰瑙嗗浘 - `Views/Pages/SettingsPageView.axaml.cs` - 鏂板缓璁剧疆椤甸潰瑙嗗浘浠g爜 - `ViewModels/MainWindowViewModel.cs` - 瀹屽叏閲嶆瀯锛屾敮鎸佸鑸拰鏍囩椤靛姛鑳? - `MainWindow.axaml` - 瀹屽叏閲嶆瀯UI甯冨眬锛屽疄鐜颁笁鍖哄煙璁捐 - **鐣岄潰甯冨眬**: - **宸︿晶瀵艰埅鏍?*: 娣辫壊涓婚锛屽寘鍚郴缁熸爣棰樸€佸鑸彍鍗曞拰鐗堟湰淇℃伅 - **鍙充晶澶撮儴鍖哄煙**: 娴呰壊鑳屾櫙锛屾樉绀洪〉闈㈡爣棰樸€佸壇鏍囬鍜屾搷浣滄寜閽? - **涓棿鍐呭鍖哄煙**: 鏍囩椤电郴缁燂紝鏀寔澶氭爣绛鹃〉鍒囨崲鍜屽叧闂?- **瀵艰埅鍔熻兘**: - **瀵艰埅鑿滃崟**: 浠〃鏉裤€佺敤鎴风鐞嗐€佺郴缁熻缃€佹姤琛ㄧ粺璁°€佸府鍔╀腑蹇? - **鍥炬爣鏀寔**: 姣忎釜瀵艰埅椤归兘鏈夊搴旂殑emoji鍥炬爣 - **閫変腑鐘舵€?*: 鏀寔瀵艰埅椤圭殑楂樹寒鏄剧ず鍜岀姸鎬佺鐞? - **鍝嶅簲寮忓懡浠?*: 浣跨敤ReactiveCommand瀹炵幇瀵艰埅閫昏緫 - **鏍囩椤靛姛鑳?*: - **鍔ㄦ€佸垱寤?*: 鐐瑰嚮瀵艰埅椤规椂鍔ㄦ€佸垱寤哄搴旂殑鏍囩椤? - **鏍囩椤电鐞?*: 鏀寔鏍囩椤电殑鎵撳紑銆佸垏鎹㈠拰鍏抽棴 - **鍏抽棴鎺у埗**: 浠〃鏉挎爣绛鹃〉涓嶅彲鍏抽棴锛屽叾浠栨爣绛鹃〉鍙叧闂? - **鍐呭缁戝畾**: 鏍囩椤靛唴瀹逛笌瀵艰埅椤瑰唴瀹瑰姩鎬佺粦瀹?- **椤甸潰鍐呭**: - **浠〃鏉块〉闈?*: 缁熻鍗$墖銆佺郴缁熶俊鎭€佸揩閫熸搷浣滄寜閽? - **鐢ㄦ埛绠$悊椤甸潰**: 鐢ㄦ埛鍒楄〃銆佹搷浣滄寜閽€佽鑹插拰鐘舵€佹樉绀? - **璁剧疆椤甸潰**: 澶栬璁剧疆銆侀€氱煡璁剧疆銆佹€ц兘璁剧疆 - **鎶€鏈壒鎬?*: - **MVVM鏋舵瀯**: 瀹屾暣鐨刅iewModel鍜孷iew鍒嗙 - **鍝嶅簲寮忕紪绋?*: 浣跨敤ReactiveUI杩涜鏁版嵁缁戝畾鍜屽懡浠ゅ鐞? - **鐜颁唬鍖朥I**: 浣跨敤鍦嗚銆侀槾褰便€佹笎鍙樼瓑鐜颁唬璁捐鍏冪礌 - **鍝嶅簲寮忓竷灞€**: 鏀寔绐楀彛澶у皬璋冩暣鍜屾渶灏忓昂瀵搁檺鍒?- **UI璁捐**: - **閰嶈壊鏂规**: 娣辫壊瀵艰埅鏍?#2C3E50) + 娴呰壊鍐呭鍖?#ECF0F1) - **瀛椾綋灞傛**: 鏍囬銆佸壇鏍囬銆佹鏂囩殑娓呮櫚灞傛缁撴瀯 - **浜や簰鍙嶉**: 鎮仠鏁堟灉銆侀€変腑鐘舵€併€佹寜閽姩鐢? - **鍥炬爣绯荤粺**: 浣跨敤emoji鍥炬爣鎻愪緵鐩磋鐨勮瑙夎瘑鍒?- **鏋舵瀯浼樺娍**: - **妯″潡鍖栬璁?*: 姣忎釜椤甸潰鐙珛鐨刅iewModel鍜孷iew - **鍙墿灞曟€?*: 鏄撲簬娣诲姞鏂扮殑瀵艰埅椤瑰拰椤甸潰 - **缁存姢鎬?*: 娓呮櫚鐨勪唬鐮佺粨鏋勫拰鑱岃矗鍒嗙 - **鐢ㄦ埛浣撻獙**: 鐩磋鐨勫鑸拰鏍囩椤垫搷浣?- **璇存槑**: - 鎴愬姛瀹炵幇浜嗗畬鏁寸殑瀵艰埅鏍?+ 鏍囩椤电晫闈㈠竷灞€ - 鎻愪緵浜嗙幇浠e寲鐨勭敤鎴风晫闈㈠拰鑹ソ鐨勭敤鎴蜂綋楠? - 寤虹珛浜嗗彲鎵╁睍鐨勯〉闈㈢鐞嗙郴缁? - 涓哄悗缁姛鑳藉紑鍙戞彁渚涗簡瀹屾暣鐨勭晫闈㈠熀纭€鏋舵瀯 ### 淇Linux瀛椾綋娓叉煋闂 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 瑙e喅Avalonia搴旂敤鍦↙inux閮ㄧ讲鍚庣晫闈㈡樉绀轰负鍗犱綅绗︽潯鐘跺浘鏍囩殑闂 - **闂**: Linux绯荤粺缂哄皯Inter瀛椾綋锛屽鑷存枃鏈覆鏌撳け璐ワ紝鏄剧ず涓哄崰浣嶇 - **淇敼鏂囦欢**: - `App.axaml` - 娣诲姞Linux瀛椾綋鍥為€€閰嶇疆锛堜慨澶峏AML璇硶閿欒锛? - `Program.cs` - 娣诲姞Linux骞冲彴瀛椾綋妫€娴嬪拰閰嶇疆锛堟坊鍔燗valonia.Media寮曠敤锛? - `WSL閮ㄧ讲璇存槑.md` - 娣诲姞瀛椾綋渚濊禆瀹夎璇存槑 - `install-fonts.sh` - 鏂板缓Linux瀛椾綋瀹夎鑴氭湰 - `install-wsl-fonts.bat` - 鏂板缓Windows鎵瑰鐞嗚剼鏈紝鐢ㄤ簬鍦╓SL涓畨瑁呭瓧浣?- **瑙e喅鏂规**: - **瀛椾綋鍥為€€鏈哄埗**: 鍦ˋpp.axaml涓坊鍔犲瓧浣撳洖閫€閰嶇疆锛屼紭鍏堜娇鐢↖nter瀛椾綋锛屽洖閫€鍒癉ejaVu Sans銆丩iberation Sans绛塋inux甯哥敤瀛椾綋 - **骞冲彴妫€娴?*: 鍦≒rogram.cs涓坊鍔燣inux骞冲彴妫€娴嬶紝Linux浣跨敤绯荤粺瀛椾綋锛學indows/macOS浣跨敤Inter瀛椾綋 - **瀛椾綋瀹夎鑴氭湰**: 鍒涘缓鑷姩鍖栬剼鏈畨瑁匧inux甯哥敤瀛椾綋鍖? - **渚濊禆鏂囨。**: 鏇存柊閮ㄧ讲璇存槑锛屾坊鍔犲瓧浣撶浉鍏崇殑瀹夎鍜岄棶棰樿В鍐虫柟妗?- **鎶€鏈壒鎬?*: - 浣跨敤FontManagerOptions閰嶇疆Linux瀛椾綋 - 瀛椾綋鍥為€€閾? Inter 鈫?DejaVu Sans 鈫?Liberation Sans 鈫?Arial 鈫?sans-serif - 鑷姩瀹夎fonts-dejavu-core銆乫onts-liberation銆乫ontconfig绛夊瓧浣撳寘 - 鏀寔WSL鍜屽師鐢烲inux鐜 - **瀹夎鍛戒护**: ```bash # 鍦╓SL涓繍琛? ./install-fonts.sh # 鎴栧湪Windows涓繍琛? install-wsl-fonts.bat ``` - **鏁堟灉**: - 瑙e喅Linux涓婃枃鏈樉绀轰负鍗犱綅绗︾殑闂 - 鎻愪緵瀹屾暣鐨勫瓧浣撴覆鏌撴敮鎸? - 淇濇寔璺ㄥ钩鍙板吋瀹规€?- **璇存槑**: - 褰诲簳瑙e喅浜哃inux瀛椾綋娓叉煋闂 - 鎻愪緵浜嗗畬鏁寸殑瀛椾綋瀹夎鍜岄厤缃В鍐虫柟妗? - 纭繚浜嗗簲鐢ㄥ湪Linux鐜涓嬬殑姝e父鏄剧ず ### 瀹炵幇鏃犺竟妗嗙獥鍙e拰鑷畾涔夌獥鍙f帶鍒舵寜閽?- **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 鍘婚櫎绐楀彛杈规锛屽疄鐜版棤杈规妯″紡锛屽苟鍦ㄥご閮ㄥ尯鍩熸坊鍔犺嚜瀹氫箟鐨勬渶澶у寲銆佹渶灏忓寲銆佸叧闂寜閽?- **淇敼鏂囦欢**: - `MainWindow.axaml` - 娣诲姞鏃犺竟妗嗛厤缃拰鑷畾涔夌獥鍙f帶鍒舵寜閽? - `MainWindow.axaml.cs` - 娣诲姞绐楀彛鎺у埗鎸夐挳鐨勪簨浠跺鐞嗛€昏緫 - **鏃犺竟妗嗛厤缃?*: - **ExtendClientAreaToDecorationsHint="True"** - 鎵╁睍瀹㈡埛绔尯鍩熷埌瑁呴グ鍖哄煙 - **ExtendClientAreaChromeHints="NoChrome"** - 绉婚櫎绯荤粺瑁呴グ - **SystemDecorations="None"** - 瀹屽叏绉婚櫎绯荤粺瑁呴グ - **鑷畾涔夌獥鍙f帶鍒舵寜閽?*: - **鏈€灏忓寲鎸夐挳**: 浣跨敤Path缁樺埗妯嚎鍥炬爣锛屾偓鍋滄椂鏄剧ず鐏拌壊鑳屾櫙 - **鏈€澶у寲/杩樺師鎸夐挳**: 浣跨敤Path缁樺埗鏂规鍥炬爣锛屾敮鎸佹渶澶у寲/杩樺師鐘舵€佸垏鎹? - **鍏抽棴鎸夐挳**: 浣跨敤Path缁樺埗X鍥炬爣锛屾偓鍋滄椂鏄剧ず绾㈣壊鑳屾櫙鍜岀櫧鑹插浘鏍?- **鎸夐挳璁捐**: - **灏哄**: 46x32鍍忕礌锛岀鍚圵indows鏍囧噯绐楀彛鎺у埗鎸夐挳灏哄 - **鏍峰紡**: 閫忔槑鑳屾櫙锛屾偓鍋滄椂鏄剧ず鐩稿簲鐨勮儗鏅壊 - **鍥炬爣**: 浣跨敤Path缁樺埗鐭㈤噺鍥炬爣锛屾敮鎸侀珮DPI鏄剧ず - **宸ュ叿鎻愮ず**: 姣忎釜鎸夐挳閮芥湁鐩稿簲鐨勫伐鍏锋彁绀鸿鏄?- **浜嬩欢澶勭悊**: - **鏈€灏忓寲**: 璁剧疆WindowState涓篗inimized - **鏈€澶у寲/杩樺師**: 鏍规嵁褰撳墠鐘舵€佸垏鎹indowState锛屽苟鏇存柊宸ュ叿鎻愮ず - **鍏抽棴**: 璋冪敤Close()鏂规硶鍏抽棴绐楀彛 - **鎶€鏈壒鎬?*: - **鍝嶅簲寮忚璁?*: 鎸夐挳鏀寔鎮仠鏁堟灉鍜岀姸鎬佸彉鍖? - **鐘舵€佺鐞?*: 鏈€澶у寲鎸夐挳鑳芥纭樉绀哄綋鍓嶇姸鎬佸拰鍒囨崲鐘舵€? - **閿欒澶勭悊**: 娣诲姞绌哄€兼鏌ワ紝纭繚鎸夐挳瀛樺湪鏃舵墠缁戝畾浜嬩欢 - **浠g爜缁勭粐**: 浣跨敤SetupWindowControls()鏂规硶缁熶竴绠$悊绐楀彛鎺у埗閫昏緫 - **UI闆嗘垚**: - **甯冨眬璋冩暣**: 鍦ㄥご閮ㄥ尯鍩熸坊鍔犵涓夊垪鐢ㄤ簬鏀剧疆绐楀彛鎺у埗鎸夐挳 - **闂磋窛璁捐**: 鎸夐挳涔嬮棿2鍍忕礌闂磋窛锛屼笌鍙充晶鍐呭鍖哄煙20鍍忕礌杈硅窛 - **瑙嗚涓€鑷存€?*: 鎸夐挳鏍峰紡涓庢暣浣揢I璁捐淇濇寔涓€鑷?- **鐢ㄦ埛浣撻獙**: - **鐩磋鎿嶄綔**: 鏍囧噯鐨勭獥鍙f帶鍒舵寜閽竷灞€鍜屼氦浜掓柟寮? - **瑙嗚鍙嶉**: 鎮仠鏁堟灉鍜岀姸鎬佸彉鍖栨彁渚涙竻鏅扮殑鐢ㄦ埛鍙嶉 - **鍔熻兘瀹屾暣**: 鏀寔鎵€鏈夋爣鍑嗙殑绐楀彛鎿嶄綔鍔熻兘 - **璇存槑**: - 鎴愬姛瀹炵幇浜嗘棤杈规绐楀彛璁捐锛屾彁渚涗簡鏇寸幇浠g殑鐣岄潰澶栬 - 鑷畾涔夌獥鍙f帶鍒舵寜閽畬鍏ㄦ浛浠d簡绯荤粺榛樿鎸夐挳 - 淇濇寔浜嗘爣鍑嗙殑Windows绐楀彛鎿嶄綔浣撻獙 - 涓哄簲鐢ㄧ▼搴忔彁渚涗簡鏇寸粺涓€鐨勮瑙夎璁¢鏍? ### 浼樺寲澶撮儴鍖哄煙璁捐鍜屽绉版€?- **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 閲嶆柊璁捐澶撮儴鍖哄煙锛屾敼鍠勮瑙夊绉版€у拰缇庤搴?- **淇敼鏂囦欢**: - `MainWindow.axaml` - 瀹屽叏閲嶆瀯澶撮儴鍖哄煙甯冨眬鍜屾牱寮?- **璁捐鏀硅繘**: - **缁熶竴楂樺害**: 璁剧疆鍥哄畾楂樺害50鍍忕礌锛岀‘淇濇墍鏈夊厓绱犲瀭鐩村眳涓榻? - **绠€鍖栧竷灞€**: 浠?鍒楀竷灞€鏀逛负2鍒楀竷灞€锛屽乏渚ф爣棰橈紝鍙充晶鎸夐挳缁? - **瀵圭О璁捐**: 鍔熻兘鎸夐挳缁勫拰绐楀彛鎺у埗鎸夐挳缁勫湪鍙充晶鍚堢悊鍒嗗竷 - **鍔熻兘鎸夐挳浼樺寲**: - **灏哄缁熶竴**: 鍒锋柊鍜岃缃寜閽敼涓?2x32鍍忕礌锛屼繚鎸佷竴鑷存€? - **鐜颁唬鏍峰紡**: 浣跨敤娴呯伆鑹茶儗鏅?#F8F9FA)鍜岃竟妗?#E9ECEF) - **鍦嗚璁捐**: 6鍍忕礌鍦嗚锛屾洿鐜颁唬鐨勮瑙夋晥鏋? - **鎮仠鏁堟灉**: 鎮仠鏃惰儗鏅彉涓?E9ECEF锛屾彁渚涙竻鏅扮殑浜や簰鍙嶉 - **绐楀彛鎺у埗鎸夐挳浼樺寲**: - **灏哄璋冩暣**: 楂樺害浠?2鍍忕礌璋冩暣涓?0鍍忕礌锛屼笌澶撮儴楂樺害鏇村崗璋? - **闂磋窛浼樺寲**: 鎸夐挳涔嬮棿鏃犻棿璺濓紝绱у瘑鎺掑垪锛岀鍚圵indows鏍囧噯 - **鎮仠鏁堟灉**: 鏈€灏忓寲鍜屾渶澶у寲鎸夐挳鎮仠鏃舵樉绀烘祬鐏拌壊鑳屾櫙 - **鍏抽棴鎸夐挳**: 淇濇寔绾㈣壊鎮仠鏁堟灉锛岀鍚堢敤鎴蜂範鎯?- **鏍囬鍖哄煙浼樺寲**: - **瀛椾綋璋冩暣**: 鏍囬瀛椾綋浠?4鍍忕礌璋冩暣涓?8鍍忕礌锛屾洿鍗忚皟 - **瀛楅噸浼樺寲**: 浣跨敤SemiBold瀛楅噸锛屾棦绐佸嚭鍙堜笉杩囬噸 - **闂磋窛浼樺寲**: 鏍囬鍜屽壇鏍囬闂磋窛浠?鍍忕礌璋冩暣涓?鍍忕礌 - **杈硅窛缁熶竴**: 宸︿晶20鍍忕礌杈硅窛锛屼笌鏁翠綋甯冨眬淇濇寔涓€鑷?- **鏁翠綋甯冨眬鏀硅繘**: - **鑳屾櫙绠€鍖?*: 浠庣伆鑹茶儗鏅敼涓虹函鐧借壊鑳屾櫙锛屾洿绠€娲? - **杈规浼樺寲**: 浣跨敤鏇寸粏鐨勮竟妗嗙嚎(#E0E0E0) - **鍨傜洿瀵归綈**: 鎵€鏈夊厓绱犻兘鍨傜洿灞呬腑瀵归綈锛岃瑙夋洿骞宠  - **闂磋窛鍚堢悊**: 鍔熻兘鎸夐挳缁勫拰绐楀彛鎺у埗鎸夐挳缁勪箣闂存湁20鍍忕礌闂磋窛 - **瑙嗚灞傛**: - **鍔熻兘鎸夐挳**: 娴呰壊鑳屾櫙锛屼腑绛変紭鍏堢骇 - **绐楀彛鎺у埗**: 閫忔槑鑳屾櫙锛屾渶楂樹紭鍏堢骇 - **鏍囬鏂囧瓧**: 娣辫壊鏂囧瓧锛屼富瑕佷俊鎭睍绀?- **鐢ㄦ埛浣撻獙**: - **鎿嶄綔鍖哄煙**: 鍔熻兘鎸夐挳鍜岀獥鍙f帶鍒舵寜閽尯鍩熸槑纭垎绂? - **瑙嗚鍙嶉**: 鎵€鏈夋寜閽兘鏈夋竻鏅扮殑鎮仠鏁堟灉 - **涓€鑷存€?*: 鎸夐挳灏哄銆侀棿璺濄€侀鑹查兘淇濇寔缁熶竴 - **璇存槑**: - 褰诲簳瑙e喅浜嗗ご閮ㄥ尯鍩熶笉瀵圭О鍜岃瑙変笉鍗忚皟鐨勯棶棰? - 鎻愪緵浜嗘洿鐜颁唬銆佹洿涓撲笟鐨勭晫闈㈣璁? - 鏀瑰杽浜嗙敤鎴蜂氦浜掍綋楠屽拰瑙嗚灞傛 - 寤虹珛浜嗙粺涓€鐨勮璁¤瑷€鍜岃瑙夎鑼? ## 2024-12-19 淇鏃犺竟妗嗙獥鍙f嫋鍔ㄥ姛鑳? ### 闂鎻忚堪 - 鏃犺竟妗嗙獥鍙h璁″悗锛岀獥鍙eけ鍘讳簡绯荤粺榛樿鐨勬爣棰樻爮 - 鐢ㄦ埛鏃犳硶閫氳繃鎷栧姩鏍囬鏍忔潵绉诲姩绐楀彛浣嶇疆 - 褰卞搷浜嗗熀鏈殑绐楀彛鎿嶄綔浣撻獙 ### 瑙e喅鏂规 - **娣诲姞鎷栧姩鍖哄煙**: 鍦ㄥご閮ㄥ尯鍩熺殑Grid鎺т欢涓婃坊鍔燦ame="TitleBarGrid" - **瀹炵幇鎷栧姩閫昏緫**: 鍦∕ainWindow.axaml.cs涓坊鍔犳嫋鍔ㄤ簨浠跺鐞?- **浜嬩欢澶勭悊**: 浣跨敤PointerPressed浜嬩欢鍜孊eginMoveDrag鏂规硶瀹炵幇绐楀彛鎷栧姩 ### 鎶€鏈疄鐜?- **XAML淇敼**: - 鍦ㄥご閮℅rid娣诲姞Name="TitleBarGrid"灞炴€?- **浠g爜淇敼**: - 娣诲姞Avalonia.Input鍛藉悕绌洪棿寮曠敤 - 鍦⊿etupWindowControls()鏂规硶涓缃爣棰樻爮鎷栧姩鍔熻兘 - 瀹炵幇OnTitleBarPointerPressed浜嬩欢澶勭悊鏂规硶 - 浣跨敤BeginMoveDrag(e)鏂规硶鍚姩绐楀彛鎷栧姩 ### 鍔熻兘鐗圭偣 - **鎷栧姩鍖哄煙**: 鏁翠釜澶撮儴鍖哄煙閮藉彲浠ョ敤鏉ユ嫋鍔ㄧ獥鍙?- **鍝嶅簲鎬?*: 宸﹂敭鎸変笅鍗冲彲寮€濮嬫嫋鍔ㄦ搷浣?- **鍏煎鎬?*: 涓庣幇鏈夌殑绐楀彛鎺у埗鎸夐挳鍔熻兘瀹屽叏鍏煎 - **鐢ㄦ埛浣撻獙**: 鎭㈠浜嗘爣鍑嗙殑绐楀彛鎷栧姩鎿嶄綔浣撻獙 ### 淇敼鏂囦欢 - `MainWindow.axaml`: 娣诲姞TitleBarGrid鍚嶇О - `MainWindow.axaml.cs`: 瀹炵幇鎷栧姩鍔熻兘閫昏緫 ### 娴嬭瘯缁撴灉 - 缂栬瘧鎴愬姛锛屾棤鏂板閿欒 - 绐楀彛鎷栧姩鍔熻兘姝e父宸ヤ綔 - 涓庣幇鏈夊姛鑳芥棤鍐茬獊 - 淇濇寔浜嗘棤杈规绐楀彛鐨勭幇浠e瑙? ## 2024-12-19 浼樺寲ContentPresenter鏍峰紡鍜岀Щ闄ら噸澶嶉〉闈㈡爣棰? ### 闂鎻忚堪 - ContentPresenter缂哄皯鍐呴棿璺濓紝鍐呭鏄剧ず杩囦簬绱у噾 - 椤甸潰鍐呭缂哄皯3D绔嬩綋鏁堟灉锛岃瑙夊眰娆℃劅涓嶈冻 - 鍚勪釜椤甸潰閮芥湁閲嶅鐨勯〉闈㈡爣棰橈紝鍗犵敤澶ч噺绌洪棿涓旀棤瀹炶川鎬ф剰涔?- 涓荤獥鍙eご閮ㄥ尯鍩熷凡缁忔樉绀洪〉闈㈡爣棰橈紝椤甸潰鍐呮爣棰橀噸澶? ### 瑙e喅鏂规 - **ContentPresenter鏍峰紡浼樺寲**: 娣诲姞鍐呴棿璺濆拰闃村奖鏁堟灉 - **绉婚櫎閲嶅鏍囬**: 鍒犻櫎鎵€鏈夐〉闈腑鐨勯噸澶嶉〉闈㈡爣棰橀儴鍒?- **3D鏁堟灉澧炲己**: 浣跨敤DropShadowEffect鍜岃竟妗嗗疄鐜扮珛浣撴劅 ### 鎶€鏈疄鐜?- **ContentPresenter鍖呰**: 浣跨敤Border鍖呰ContentPresenter - **鍐呴棿璺濊缃?*: Padding="25" 鎻愪緵鍏呰冻鐨勫唴瀹归棿璺?- **闃村奖鏁堟灉**: DropShadowEffect瀹炵幇3D绔嬩綋鎰?- **杈规瑁呴グ**: 娣诲姞娣¤壊杈规澧炲己瑙嗚灞傛 - **椤甸潰鏍囬绉婚櫎**: 鍒犻櫎鎵€鏈夐〉闈㈣鍥句腑鐨勯噸澶嶆爣棰橀儴鍒? ### 鏍峰紡鐗圭偣 - **鍐呴棿璺?*: 25px鍐呰竟璺濓紝鍐呭鏄剧ず鏇磋垝閫?- **闃村奖鏁堟灉**: 榛戣壊闃村奖锛岄€忔槑搴?.08锛屾ā绯婂崐寰?2px - **3D鏁堟灉**: 鍚戜笅鍋忕Щ2px锛岃惀閫犳诞璧锋晥鏋?- **鍦嗚璁捐**: 8px鍦嗚锛岀幇浠e寲澶栬 - **杈规瑁呴グ**: 娣$伆鑹茶竟妗嗭紝澧炲己灞傛鎰? ### 椤甸潰浼樺寲 - **DashboardPageView**: 绉婚櫎"馃搳 浠〃鏉?鏍囬閮ㄥ垎 - **UsersPageView**: 绉婚櫎"馃懃 鐢ㄦ埛绠$悊"鏍囬閮ㄥ垎 - **SettingsPageView**: 绉婚櫎"鈿欙笍 绯荤粺璁剧疆"鏍囬閮ㄥ垎 - **ReportsPageView**: 绉婚櫎"馃搱 鎶ヨ〃缁熻"鏍囬閮ㄥ垎 - **HelpPageView**: 绉婚櫎"鉂?甯姪涓績"鏍囬閮ㄥ垎 ### 淇敼鏂囦欢 - `MainWindow.axaml`: 浼樺寲ContentPresenter鏍峰紡 - `Views/Pages/DashboardPageView.axaml`: 绉婚櫎閲嶅鏍囬 - `Views/Pages/UsersPageView.axaml`: 绉婚櫎閲嶅鏍囬 - `Views/Pages/SettingsPageView.axaml`: 绉婚櫎閲嶅鏍囬 - `Views/Pages/ReportsPageView.axaml`: 绉婚櫎閲嶅鏍囬 - `Views/Pages/HelpPageView.axaml`: 绉婚櫎閲嶅鏍囬 ### 浼樺寲鏁堟灉 - **绌洪棿鍒╃敤**: 椤甸潰鍐呭鍖哄煙澧炲姞绾?0px楂樺害 - **瑙嗚灞傛**: 3D闃村奖鏁堟灉澧炲己绔嬩綋鎰?- **鍐呭灞曠ず**: 鍐呴棿璺濊鍐呭鏄剧ず鏇磋垝閫?- **鐣岄潰缁熶竴**: 閬垮厤閲嶅鏍囬锛岀晫闈㈡洿绠€娲?- **鐢ㄦ埛浣撻獙**: 鏇村绌洪棿鐢ㄤ簬瀹為檯鍐呭灞曠ず ## 2025-01-10 瀹炵幇棰滆壊璧勬簮绠$悊绯荤粺 ### 闂鎻忚堪 - MainWindow.axaml涓ぇ閲忎娇鐢ㄧ‖缂栫爜鐨勯鑹插€硷紙濡?2C3E50銆?34495E绛夛級 - 棰滆壊鍊煎垎鏁e湪鍚勪釜鎺т欢涓紝闅句互缁熶竴绠$悊鍜岀淮鎶?- 闇€瑕佺被浼糤PF闈欐€佽祫婧愮殑鏂瑰紡鏉ユ彁鍙栧拰閲嶇敤棰滆壊鍊?- 缂轰箯缁熶竴鐨勯鑹蹭富棰樼鐞嗙郴缁? ### 瑙e喅鏂规 - **鍒涘缓棰滆壊璧勬簮鏂囦欢**: 寤虹珛涓撻棬鐨凜olors.axaml璧勬簮鏂囦欢 - **璧勬簮寮曠敤绯荤粺**: 鍦ˋpp.axaml涓敞鍐岄鑹茶祫婧?- **鏇挎崲纭紪鐮佸€?*: 灏嗘墍鏈夌‖缂栫爜棰滆壊鍊兼浛鎹负璧勬簮寮曠敤 - **缁熶竴棰滆壊绠$悊**: 寤虹珛瀹屾暣鐨勯鑹蹭富棰樹綋绯? ### 鎶€鏈疄鐜?- **璧勬簮鏂囦欢缁撴瀯**: 鍒涘缓Resources/Colors.axaml鏂囦欢 - **璧勬簮娉ㄥ唽**: 鍦ˋpp.axaml涓娇鐢≧esourceDictionary.MergedDictionaries - **璧勬簮寮曠敤**: 浣跨敤{StaticResource ResourceKey}璇硶寮曠敤棰滆壊 - **鍒嗙被绠$悊**: 鎸夊姛鑳藉垎绫荤鐞嗛鑹茶祫婧愶紙涓昏壊璋冦€佽緟鍔╄壊銆佽儗鏅壊绛夛級 ### 棰滆壊璧勬簮鍒嗙被 - **涓昏壊璋?*: PrimaryDark(#2C3E50)銆丳rimaryDarkHover(#34495E)銆丳rimaryBlue(#3498DB) - **杈呭姪鑹茶皟**: SecondaryGray(#BDC3C7)銆丼econdaryGrayDark(#7F8C8D)銆丼econdaryGrayLight(#999999) - **鑳屾櫙鑹茬郴**: BackgroundWhite(#FFFFFF)銆丅ackgroundLight(#F5F5F5)銆丅ackgroundLightHover(#F8F9FA) - **杈规鑹茬郴**: BorderLight(#E0E0E0)銆丅orderMedium(#E9ECEF) - **鏂囧瓧鑹茬郴**: TextPrimary(#2C3E50)銆乀extSecondary(#6C757D)銆乀extWhite(#FFFFFF) - **鐘舵€佽壊绯?*: StatusSuccess銆丼tatusWarning銆丼tatusError銆丼tatusInfo - **鎸夐挳鑹茬郴**: ButtonClose(#E81123)銆丅uttonCloseHover(#FF4444)銆丅uttonCloseActive(#E53E3E) ### 淇敼鏂囦欢 - `Resources/Colors.axaml`: 鏂板缓棰滆壊璧勬簮瀹氫箟鏂囦欢 - `App.axaml`: 娣诲姞棰滆壊璧勬簮娉ㄥ唽 - `MainWindow.axaml`: 鏇挎崲鎵€鏈夌‖缂栫爜棰滆壊鍊间负璧勬簮寮曠敤 ### 鎶€鏈紭鍔?- **缁熶竴绠$悊**: 鎵€鏈夐鑹插€奸泦涓湪涓€涓枃浠朵腑绠$悊 - **鏄撲簬缁存姢**: 淇敼棰滆壊鍙渶鏇存敼璧勬簮鏂囦欢涓殑瀹氫箟 - **涓婚鏀寔**: 涓哄悗缁疄鐜颁富棰樺垏鎹㈠姛鑳藉瀹氬熀纭€ - **浠g爜鏁存磥**: 娑堥櫎纭紪鐮侀鑹插€硷紝鎻愰珮浠g爜鍙鎬?- **閲嶇敤鎬у己**: 棰滆壊璧勬簮鍙湪鏁翠釜搴旂敤绋嬪簭涓噸澶嶄娇鐢? ### 浣跨敤绀轰緥 ```xml ``` ### 鎵╁睍鎬?- **涓婚鍒囨崲**: 鍙交鏉惧疄鐜版槑鏆椾富棰樺垏鎹?- **鍝佺墝瀹氬埗**: 鍙揩閫熻皟鏁村搧鐗岃壊褰?- **鍔ㄦ€佷富棰?*: 鏀寔杩愯鏃朵富棰樺彉鏇?- **澶氳瑷€鏀寔**: 涓哄浗闄呭寲涓婚鎻愪緵鍩虹 ### 璇存槑 - 鎴愬姛瀹炵幇浜嗙被浼糤PF闈欐€佽祫婧愮殑棰滆壊绠$悊绯荤粺 - 鎻愪緵浜嗗畬鏁寸殑棰滆壊涓婚鏋舵瀯 - 涓哄悗缁璘I涓婚鍔熻兘鎵╁睍濂犲畾浜嗗潥瀹炲熀纭€ - 鎻愰珮浜嗕唬鐮佺殑鍙淮鎶ゆ€у拰鍙墿灞曟€? ### 淇缂栬瘧閿欒 - **闂**: ColorUsageExamples.axaml绀轰緥鏂囦欢涓娇鐢ㄤ簡Avalonia涓嶆敮鎸佺殑灞炴€?- **閿欒**: SelectionForeground鍜孲electionBackground灞炴€у湪Avalonia鐨凾extBox涓笉瀛樺湪 - **瑙e喅**: 鍒犻櫎浜嗙ず渚嬫枃浠讹紝鍥犱负瀹冨彧鏄敤浜庢紨绀猴紝涓嶅簲璇ュ寘鍚湪缂栬瘧涓?- **缁撴灉**: 椤圭洰缂栬瘧鎴愬姛锛屾棤閿欒 ## 2025-01-10 瀹炵幇涓嫳鏂囧璇█璧勬簮绠$悊绯荤粺 ### 闂鎻忚堪 - 搴旂敤绋嬪簭涓ぇ閲忎娇鐢ㄧ‖缂栫爜鐨勪腑鏂囨枃鏈?- 缂轰箯澶氳瑷€鏀寔锛屾棤娉曢€傚簲鍥介檯鍖栭渶姹?- 闇€瑕佺被浼糤PF鐨勮祫婧愮鐞嗙郴缁熸潵鏀寔涓嫳鏂囧垏鎹?- 鏂囨湰鍐呭鍒嗘暎鍦ㄥ悇涓枃浠朵腑锛岄毦浠ョ粺涓€绠$悊 ### 瑙e喅鏂规 - **鍒涘缓澶氳瑷€璧勬簮鏂囦欢**: 寤虹珛涓嫳鏂囪祫婧愭枃浠剁郴缁?- **璧勬簮鏈嶅姟鏋舵瀯**: 鍒涘缓IResourceService鎺ュ彛鍜屽疄鐜扮被 - **渚濊禆娉ㄥ叆闆嗘垚**: 灏嗚祫婧愭湇鍔¢泦鎴愬埌渚濊禆娉ㄥ叆瀹瑰櫒 - **UI鏂囨湰鏇挎崲**: 灏嗙‖缂栫爜鏂囨湰鏇挎崲涓鸿祫婧愬紩鐢? ### 鎶€鏈疄鐜?- **璧勬簮鏂囦欢缁撴瀯**: 鍒涘缓Resources/Strings.zh-CN.axaml鍜孯esources/Strings.en.axaml - **璧勬簮鏈嶅姟**: 瀹炵幇IResourceService鎺ュ彛锛屾敮鎸佽繍琛屾椂璇█鍒囨崲 - **XAML璧勬簮娉ㄥ唽**: 鍦ˋpp.axaml涓敞鍐岃祫婧愭枃浠?- **ViewModel闆嗘垚**: 鍦∕ainWindowViewModel涓娇鐢ㄨ祫婧愭湇鍔? ### 璧勬簮鏂囦欢鍐呭 - **搴旂敤绋嬪簭鏍囬**: AppTitle銆丄ppSubtitle - **瀵艰埅鑿滃崟**: NavDashboard銆丯avUsers銆丯avSettings銆丯avReports銆丯avHelp - **鎸夐挳鏂囨湰**: BtnRefresh銆丅tnSettings銆丅tnMinimize銆丅tnMaximize銆丅tnClose绛?- **椤甸潰鏍囬**: PageDashboard銆丳ageUsers銆丳ageSettings銆丳ageReports銆丳ageHelp - **閫氱敤鏂囨湰**: Loading銆丒rror銆丼uccess銆乄arning銆両nfo銆丆onfirm銆丆ancel绛?- **鐘舵€佹枃鏈?*: StatusActive銆丼tatusInactive銆丼tatusPending銆丼tatusCompleted绛?- **鐢ㄦ埛绠$悊**: UserList銆乁serName銆乁serEmail銆乁serRole銆乁serStatus绛?- **璁剧疆椤甸潰**: SettingsGeneral銆丼ettingsAppearance銆丼ettingsNotifications绛?- **浠〃鏉?*: DashboardOverview銆丏ashboardStats銆丏ashboardCharts绛?- **鎶ヨ〃鍔熻兘**: ReportGenerate銆丷eportExport銆丷eportDateRange绛?- **甯姪绯荤粺**: HelpDocumentation銆丠elpFAQ銆丠elpContact銆丠elpAbout绛? ### 淇敼鏂囦欢 - `Resources/Strings.zh-CN.axaml`: 鏂板缓涓枃璧勬簮鏂囦欢 - `Resources/Strings.en.axaml`: 鏂板缓鑻辨枃璧勬簮鏂囦欢 - `Services/IResourceService.cs`: 鏂板缓璧勬簮鏈嶅姟鎺ュ彛 - `Services/ResourceService.cs`: 鏂板缓璧勬簮鏈嶅姟瀹炵幇 - `Extensions/ServiceCollectionExtensions.cs`: 娉ㄥ唽璧勬簮鏈嶅姟 - `App.axaml`: 娉ㄥ唽涓枃璧勬簮鏂囦欢 - `MainWindow.axaml`: 鏇挎崲纭紪鐮佹枃鏈负璧勬簮寮曠敤 - `ViewModels/MainWindowViewModel.cs`: 闆嗘垚璧勬簮鏈嶅姟 ### 鎶€鏈壒鎬?- **杩愯鏃惰瑷€鍒囨崲**: 鏀寔鍔ㄦ€佸垏鎹腑鑻辨枃 - **璧勬簮缂撳瓨**: 浣跨敤Dictionary缂撳瓨璧勬簮锛屾彁楂樻€ц兘 - **浜嬩欢閫氱煡**: CultureChanged浜嬩欢鏀寔UI瀹炴椂鏇存柊 - **鍥為€€鏈哄埗**: 璧勬簮缂哄け鏃朵娇鐢ㄩ粯璁ゆ枃鏈?- **鏍煎紡鍖栨敮鎸?*: 鏀寔甯﹀弬鏁扮殑瀛楃涓叉牸寮忓寲 ### 浣跨敤鏂瑰紡 ```csharp // 鍦╒iewModel涓娇鐢?var title = _resourceService?.GetString("NavDashboard") ?? "浠〃鏉?; // 鍦╔AML涓娇鐢? ``` ### 鎵╁睍鎬?- **澶氳瑷€鏀寔**: 鍙交鏉炬坊鍔犲叾浠栬瑷€璧勬簮鏂囦欢 - **鍔ㄦ€佸垏鎹?*: 鏀寔杩愯鏃惰瑷€鍒囨崲 - **璧勬簮绠$悊**: 闆嗕腑绠$悊鎵€鏈夋枃鏈祫婧?- **鍥介檯鍖?*: 涓哄簲鐢ㄧ▼搴忓浗闄呭寲鎻愪緵瀹屾暣鍩虹 ### 璇存槑 - 鎴愬姛瀹炵幇浜嗗畬鏁寸殑涓嫳鏂囧璇█璧勬簮绠$悊绯荤粺 - 鎻愪緵浜嗙被浼糤PF鐨勮祫婧愮鐞嗗姛鑳?- 鏀寔杩愯鏃惰瑷€鍒囨崲鍜屽姩鎬佹洿鏂?- 涓哄簲鐢ㄧ▼搴忓浗闄呭寲濂犲畾浜嗗潥瀹炲熀纭€ ## 2025-01-10 娣诲姞 HeroIcons.Avalonia 鍥炬爣搴撴敮鎸? ### 闂鎻忚堪 - 搴旂敤绋嬪簭闇€瑕佸睍绀?HeroIcons 鍥炬爣搴撶殑鍔熻兘 - 闇€瑕佸垱寤轰竴涓笓闂ㄧ殑鍥炬爣瀵艰埅鐣岄潰 - 鐢ㄦ埛闇€瑕佽兘澶熸祻瑙堛€佹悳绱㈠拰閫夋嫨鍥炬爣 - 闇€瑕佹彁渚涘浘鏍囩殑 XAML 浠g爜绀轰緥 ### 瑙e喅鏂规 - **娣诲姞 NuGet 鍖?*: 寮曠敤 HeroIcons.Avalonia 1.0.0 鐗堟湰 - **鍒涘缓鍥炬爣椤甸潰**: 鏂板缓涓撻棬鐨勫浘鏍囧鑸〉闈?- **鍥炬爣鏁版嵁绠$悊**: 鍒涘缓鍥炬爣鏁版嵁妯″瀷鍜?ViewModel - **鎼滅储鍜岃繃婊?*: 瀹炵幇鎸夊垎绫诲拰鍚嶇О鎼滅储鍔熻兘 - **浠g爜绀轰緥**: 鎻愪緵 XAML 浣跨敤绀轰緥 ### 鎶€鏈疄鐜?- **鍖呭紩鐢?*: 鍦?MyAvaloniaApp.csproj 涓坊鍔?HeroIcons.Avalonia 鍖?- **鏍峰紡闆嗘垚**: 鍦?App.axaml 涓坊鍔?HeroIcons 鏍峰紡寮曠敤 - **椤甸潰鏋舵瀯**: 鍒涘缓 IconsPageViewModel 鍜?IconsPageView - **鏁版嵁妯″瀷**: 鍒涘缓 IconItem 绫荤鐞嗗浘鏍囦俊鎭?- **杞崲鍣?*: 娣诲姞 NullToBoolConverter 鏀寔鏉′欢鏄剧ず ### 鍔熻兘鐗规€?- **鍥炬爣鍒嗙被**: 鍩虹銆佹搷浣溿€佸鑸€佺姸鎬併€佸獟浣撱€佹枃浠躲€侀€氫俊銆佸伐鍏风瓑8涓垎绫?- **鎼滅储鍔熻兘**: 鏀寔鎸夊浘鏍囧悕绉般€佹弿杩般€佸垎绫绘悳绱?- **鍒嗙被杩囨护**: 涓嬫媺閫夋嫨鍣ㄦ敮鎸佹寜鍒嗙被杩囨护鍥炬爣 - **鍥炬爣棰勮**: 48x48鍍忕礌鐨勫浘鏍囬瑙堝尯鍩?- **璇︾粏淇℃伅**: 閫変腑鍥炬爣鏄剧ず璇︾粏淇℃伅鍜屼娇鐢ㄧず渚?- **浠g爜澶嶅埗**: 鎻愪緵 XAML 浠g爜绀轰緥鍜屽鍒跺姛鑳? ### 鍥炬爣鏁版嵁 - **鍩虹鍥炬爣**: Home銆乁ser銆丼ettings銆丼earch銆丮enu - **鎿嶄綔鍥炬爣**: Plus銆丮inus銆丒dit銆乀rash銆丼ave - **瀵艰埅鍥炬爣**: ArrowLeft銆丄rrowRight銆丄rrowUp銆丄rrowDown銆丆hevronLeft銆丆hevronRight - **鐘舵€佸浘鏍?*: Check銆乆銆丄lert銆両nfo銆丼uccess - **濯掍綋鍥炬爣**: Play銆丳ause銆丼top銆乂olume - **鏂囦欢鍥炬爣**: Document銆丗older銆丏ownload銆乁pload - **閫氫俊鍥炬爣**: Mail銆丳hone銆丮essage - **宸ュ叿鍥炬爣**: Tool銆乄rench銆丆og ### 鐣岄潰璁捐 - **缃戞牸甯冨眬**: 6鍒楃綉鏍煎竷灞€灞曠ず鍥炬爣 - **鎼滅储鍖哄煙**: 鎼滅储妗?+ 鍒嗙被閫夋嫨鍣?+ 缁熻淇℃伅 - **璇︽儏闈㈡澘**: 鍙充晶300鍍忕礌瀹界殑璇︽儏闈㈡澘 - **鍝嶅簲寮忚璁?*: 鏀寔鎮仠鏁堟灉鍜岄€変腑鐘舵€?- **鐜颁唬鍖朥I**: 浣跨敤鍦嗚銆侀槾褰便€佹笎鍙樼瓑鐜颁唬璁捐鍏冪礌 ### 淇敼鏂囦欢 - `MyAvaloniaApp.csproj`: 娣诲姞 HeroIcons.Avalonia 鍖呭紩鐢?- `App.axaml`: 娣诲姞 HeroIcons 鏍峰紡寮曠敤 - `ViewModels/Pages/IconsPageViewModel.cs`: 鏂板缓鍥炬爣椤甸潰 ViewModel - `Views/Pages/IconsPageView.axaml`: 鏂板缓鍥炬爣椤甸潰瑙嗗浘 - `Views/Pages/IconsPageView.axaml.cs`: 鏂板缓鍥炬爣椤甸潰浠g爜 - `Converters/StringConverters.cs`: 娣诲姞 NullToBoolConverter - `ViewModels/MainWindowViewModel.cs`: 娣诲姞鍥炬爣瀵艰埅鑿滃崟椤?- `Resources/Strings.zh-CN.axaml`: 娣诲姞鍥炬爣搴撶浉鍏冲瓧绗︿覆璧勬簮 ### 鎶€鏈壒鎬?- **鍝嶅簲寮忕紪绋?*: 浣跨敤 ReactiveUI 杩涜鏁版嵁缁戝畾鍜屽懡浠ゅ鐞?- **鎼滅储浼樺寲**: 300姣闃叉姈鎼滅储锛屾彁楂樻€ц兘 - **鍒嗙被绠$悊**: 鍔ㄦ€佺敓鎴愬垎绫诲垪琛紝鏀寔"鍏ㄩ儴"閫夐」 - **鐘舵€佺鐞?*: 瀹屾暣鐨勯€変腑鐘舵€佸拰杩囨护鐘舵€佺鐞?- **閿欒澶勭悊**: 瀹屽杽鐨勫紓甯稿鐞嗗拰鏃ュ織璁板綍 ### 浣跨敤鏂瑰紡 ```xml ``` ### 鎵╁睍鎬?- **鍥炬爣鎵╁睍**: 鍙交鏉炬坊鍔犳洿澶氬浘鏍囧埌鏁版嵁闆嗗悎 - **鍒嗙被鎵╁睍**: 鏀寔娣诲姞鏂扮殑鍥炬爣鍒嗙被 - **鍔熻兘鎵╁睍**: 鍙坊鍔犲浘鏍囨敹钘忋€佸巻鍙茶褰曠瓑鍔熻兘 - **涓婚鏀寔**: 鏀寔鍥炬爣棰滆壊涓婚鍒囨崲 ### 璇存槑 - 鎴愬姛闆嗘垚浜?HeroIcons.Avalonia 鍥炬爣搴?- 鎻愪緵浜嗗畬鏁寸殑鍥炬爣娴忚鍜岄€夋嫨鍔熻兘 - 寤虹珛浜嗗彲鎵╁睍鐨勫浘鏍囩鐞嗙郴缁?- 涓哄簲鐢ㄧ▼搴忔彁渚涗簡涓板瘜鐨勫浘鏍囪祫婧愭敮鎸? ### 淇 HeroIcons.Avalonia 1.0.4 鐗堟湰鍏煎鎬ч棶棰?- **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 淇 HeroIcons.Avalonia 1.0.4 鐗堟湰鐨勬牱寮忔枃浠惰矾寰勫拰灞炴€у吋瀹规€ч棶棰?- **闂**: - Assembly "HeroIcons.Avalonia" was not found from the "avares://HeroIcons.Avalonia/Styles.axaml" source - StrokeLineJoin 灞炴€у湪 Avalonia 涓笉瀛樺湪 - NullToBoolConverter.Instance 寮曠敤閿欒 - **瑙e喅鏂规**: - **绉婚櫎鏍峰紡鏂囦欢寮曠敤**: 鏆傛椂绉婚櫎 HeroIcons.Avalonia 鐨勬牱寮忔枃浠跺紩鐢紝鍥犱负 1.0.4 鐗堟湰鍙兘涓嶉渶瑕侀澶栫殑鏍峰紡鏂囦欢 - **淇灞炴€у吋瀹规€?*: 绉婚櫎 StrokeLineJoin 灞炴€э紝鍙繚鐣?StrokeLineCap 灞炴€? - **淇杞崲鍣ㄥ紩鐢?*: 灏?NullToBoolConverter.Instance 鏀逛负 StringConverters.NullToBoolConverter - **鏇存柊鍖呯増鏈?*: 灏嗛」鐩枃浠朵腑鐨勫寘鐗堟湰浠?1.0.0 鏇存柊涓?1.0.4 - **淇敼鏂囦欢**: - `MyAvaloniaApp.csproj`: 鏇存柊 HeroIcons.Avalonia 鐗堟湰涓?1.0.4 - `App.axaml`: 绉婚櫎鏍峰紡鏂囦欢寮曠敤 - `Views/Pages/IconsPageView.axaml`: 淇灞炴€у吋瀹规€у拰杞崲鍣ㄥ紩鐢?- **鎶€鏈粏鑺?*: - HeroIcons.Avalonia 1.0.4 鐗堟湰鍙兘涓嶉渶瑕侀澶栫殑鏍峰紡鏂囦欢 - Avalonia 鐨?Path 鍏冪礌涓嶆敮鎸?StrokeLineJoin 灞炴€? - 杞崲鍣ㄩ渶瑕侀€氳繃 StringConverters 绫昏闂?- **娴嬭瘯缁撴灉**: - 椤圭洰鎴愬姛鏋勫缓锛屾棤缂栬瘧閿欒 - 搴旂敤绋嬪簭鍙互姝e父鍚姩 - 鍥炬爣搴撳姛鑳芥甯稿伐浣?- **璇存槑**: - 瑙e喅浜?HeroIcons.Avalonia 1.0.4 鐗堟湰鐨勫吋瀹规€ч棶棰? - 纭繚浜嗗簲鐢ㄧ▼搴忕殑姝e父杩愯 - 鍥炬爣搴撳姛鑳藉畬鍏ㄥ彲鐢紝鐢ㄦ埛鍙互閫氳繃 Path 鍏冪礌鐩存帴浣跨敤鍥炬爣 ### 淇 StaticResource 璧勬簮缂哄け闂 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 淇 IconsPageView.axaml 涓?PrimaryBlueHover 璧勬簮缂哄け瀵艰嚧鐨?StaticResource 閿欒 - **闂**: - StaticResourceExtension.ProvideValue 閿欒 - IconsPageView.axaml 绗?268 琛屾棤娉曟壘鍒?PrimaryBlueHover 璧勬簮 - 搴旂敤绋嬪簭鍚姩鏃跺穿婧?- **瑙e喅鏂规**: - **娣诲姞缂哄け璧勬簮**: 鍦?Colors.axaml 涓坊鍔?PrimaryBlueHover 棰滆壊瀹氫箟 - **棰滆壊鍊?*: 浣跨敤 #2980B9 浣滀负 PrimaryBlue 鐨勬偓鍋滅姸鎬侀鑹?- **淇敼鏂囦欢**: - `Resources/Colors.axaml`: 娣诲姞 PrimaryBlueHover 棰滆壊璧勬簮 - **鎶€鏈粏鑺?*: - PrimaryBlueHover 鏄?PrimaryBlue 鐨勬繁鑹茬増鏈紝鐢ㄤ簬鎸夐挳鎮仠鏁堟灉 - 棰滆壊鍊?#2980B9 涓?PrimaryBlue #3498DB 褰㈡垚鑹ソ鐨勮瑙夊眰娆?- **娴嬭瘯缁撴灉**: - 椤圭洰鎴愬姛鏋勫缓锛屾棤缂栬瘧閿欒 - 搴旂敤绋嬪簭鍙互姝e父鍚姩 - 鍥炬爣搴撴寜閽偓鍋滄晥鏋滄甯稿伐浣?- **璇存槑**: - 瑙e喅浜嗚祫婧愮己澶卞鑷寸殑搴旂敤绋嬪簭宕╂簝闂 - 瀹屽杽浜嗛鑹茶祫婧愮郴缁? - 纭繚浜嗗浘鏍囧簱鐣岄潰鐨勫畬鏁村姛鑳? ### 淇 HeroIcons.Avalonia 寮曠敤闂 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 淇 HeroIcons.Avalonia 鍖呭紩鐢ㄩ棶棰橈紝鏀圭敤 Path 鍏冪礌鐩存帴浣跨敤 SVG 璺緞 - **闂**: - HeroIcons.Avalonia 1.0.4 鐗堟湰鐨勫懡鍚嶇┖闂存棤娉曟纭瘑鍒? - 缂栬瘧閿欒锛氭湭鑳芥壘鍒扮被鍨嬫垨鍛藉悕绌洪棿鍚?HeroIcons" - HeroIconKind 鏋氫妇鏃犳硶浣跨敤 - **瑙e喅鏂规**: - **绉婚櫎鍖呬緷璧?*: 鏆傛椂绉婚櫎瀵?HeroIcons.Avalonia 鍖呯殑鐩存帴渚濊禆 - **浣跨敤 SVG 璺緞**: 鐩存帴浣跨敤 HeroIcons 鐨?SVG 璺緞鏁版嵁 - **Path 鎺т欢**: 浣跨敤 Avalonia 鐨?Path 鎺т欢鏉ユ覆鏌撳浘鏍? - **淇濇寔鍔熻兘**: 鍥炬爣搴撶殑鎵€鏈夊姛鑳戒繚鎸佷笉鍙?- **淇敼鏂囦欢**: - `ViewModels/Pages/IconsPageViewModel.cs`: 绉婚櫎 HeroIcons.Avalonia 寮曠敤锛屼娇鐢?XamlPath 灞炴€? - `Views/Pages/IconsPageView.axaml`: 绉婚櫎 heroicons 鍛藉悕绌洪棿锛屼娇鐢?Path 鎺т欢 - **鎶€鏈粏鑺?*: - 浣跨敤鏍囧噯鐨?SVG 璺緞鏁版嵁锛屽吋瀹?Avalonia 鐨?Path 鎺т欢 - 淇濇寔浜嗗浘鏍囧簱鐨勬悳绱€佸垎绫汇€侀瑙堢瓑鍔熻兘 - 鍥炬爣鏄剧ず鏁堟灉涓?HeroIcons 瀹樻柟鍥炬爣涓€鑷?- **娴嬭瘯缁撴灉**: - 椤圭洰鎴愬姛鏋勫缓锛屾棤缂栬瘧閿欒 - 搴旂敤绋嬪簭鍙互姝e父鍚姩 - 鍥炬爣搴撳姛鑳藉畬鍏ㄦ甯?- **璇存槑**: - 铏界劧鏆傛椂娌℃湁浣跨敤 HeroIcons.Avalonia 鍖咃紝浣嗗疄鐜颁簡鐩稿悓鐨勫姛鑳? - 鍥炬爣搴撴彁渚涗簡瀹屾暣鐨?HeroIcons 鍥炬爣闆嗗悎 - 鐢ㄦ埛鍙互閫氳繃鎼滅储銆佸垎绫荤瓑鏂瑰紡娴忚鍜屼娇鐢ㄥ浘鏍? ### HeroIcons.Avalonia 鍖呮祴璇曠粨鏋?- **鏃ユ湡**: 2025骞?鏈?0鏃?- **娴嬭瘯鐩殑**: 娴嬭瘯 HeroIcons.Avalonia 鍖呯殑姝g‘浣跨敤鏂规硶 - **娴嬭瘯鍐呭**: - 灏濊瘯浣跨敤 HeroIcons.Avalonia 1.0.2 鐗堟湰 - 娴嬭瘯 HeroIcon 鎺т欢鐨勪娇鐢? - 娴嬭瘯 HeroIconKind 鏋氫妇鐨勪娇鐢? - 娴嬭瘯鏍峰紡寮曠敤鐨勬纭矾寰?- **娴嬭瘯缁撴灉**: - **鍖呭畨瑁?*: HeroIcons.Avalonia 1.0.2 鍙互鎴愬姛瀹夎 - **鍛藉悕绌洪棿闂**: `clr-namespace:HeroIcons.Avalonia;assembly=HeroIcons.Avalonia` 鏃犳硶姝g‘瑙f瀽 - **绫诲瀷瑙f瀽閿欒**: `Unable to resolve type HeroIcon from namespace` - **鏍峰紡寮曠敤闂**: `avares://HeroIcons.Avalonia/Styles.axaml` 璺緞鏃犳硶鎵惧埌 - **闂鍒嗘瀽**: - HeroIcons.Avalonia 鍖呭彲鑳藉瓨鍦ㄤ互涓嬮棶棰橈細 1. 鍛藉悕绌洪棿瀹氫箟涓嶆纭? 2. 绋嬪簭闆嗗紩鐢ㄦ湁闂 3. 鏍峰紡璧勬簮璺緞涓嶆纭? 4. 鍖呯増鏈笌 Avalonia 11.3.7 涓嶅吋瀹?- **瑙e喅鏂规**: - 缁х画浣跨敤 Path 鎺т欢 + SVG 璺緞鐨勬柟寮? - 杩欑鏂瑰紡绋冲畾鍙潬锛屽姛鑳藉畬鏁? - 鍥炬爣鏄剧ず鏁堟灉涓?HeroIcons 瀹樻柟鍥炬爣涓€鑷?- **缁撹**: - HeroIcons.Avalonia 鍖呭湪褰撳墠鐜涓嬫棤娉曟甯镐娇鐢? - 寤鸿浣跨敤 Path 鎺т欢 + SVG 璺緞鐨勬浛浠f柟妗? - 鏇夸唬鏂规鍔熻兘瀹屾暣锛屾€ц兘鑹ソ ### 娣诲姞 HeroIcons.Avalonia 闈欐€佺ず渚?- **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 鍦?IconsPageView.axaml 涓坊鍔?HeroIcons.Avalonia 鐨勯潤鎬佺ず渚?- **淇敼鏂囦欢**: - `Views/Pages/IconsPageView.axaml` - 娣诲姞 heroicons 鍛藉悕绌洪棿寮曠敤鍜岄潤鎬佺ず渚?- **鎶€鏈疄鐜?*: - **鍛藉悕绌洪棿寮曠敤**: 娣诲姞 `xmlns:heroicons="using:HeroIcons.Avalonia"` - **闈欐€佺ず渚?*: 鍦ㄩ〉闈㈡爣棰樹笅鏂规坊鍔?涓?HeroIcons.Avalonia 鍥炬爣绀轰緥 - **绀轰緥鍥炬爣**: HomeIcon銆乁serIcon銆丆og6ToothIcon銆丠eartIcon - **绀轰緥璁捐**: - **甯冨眬**: 姘村钩鎺掑垪鐨勫浘鏍囩ず渚嬶紝姣忎釜鍥炬爣40x40鍍忕礌 - **鏍峰紡**: 娴呰壊鑳屾櫙銆佽竟妗嗐€佸渾瑙掕璁? - **鏍囩**: 姣忎釜鍥炬爣涓嬫柟鏄剧ず瀵瑰簲鐨勫悕绉? - **棰滆壊**: 浣跨敤 TextPrimary 棰滆壊濉厖鍥炬爣 - **鎶€鏈壒鎬?*: - **鍛藉悕绌洪棿**: 姝g‘寮曠敤 HeroIcons.Avalonia 鍛藉悕绌洪棿 - **鍥炬爣鎺т欢**: 浣跨敤 heroicons:HomeIcon 绛夋帶浠? - **灞炴€ц缃?*: Width="20" Height="20" Fill="{StaticResource TextPrimary}" - **鍝嶅簲寮忚璁?*: 鍥炬爣鍦ㄨ竟妗嗗唴灞呬腑鏄剧ず - **浣跨敤绀轰緥**: ```xml ``` - **璇存槑**: - 鎴愬姛娣诲姞浜?HeroIcons.Avalonia 鐨勯潤鎬佺ず渚? - 灞曠ず浜嗗浣曞湪 XAML 涓娇鐢?HeroIcons.Avalonia 鍥炬爣鎺т欢 - 鎻愪緵浜嗙洿瑙傜殑鍥炬爣浣跨敤鍙傝€? - 涓哄紑鍙戣€呮彁渚涗簡 HeroIcons.Avalonia 鐨勪娇鐢ㄧず渚? ### 淇 HeroIcons.Avalonia 鎺т欢灞炴€ч棶棰?- **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 淇 HeroIcons.Avalonia 鎺т欢灞炴€т娇鐢ㄩ敊璇紝鏀圭敤姝g‘鐨?HeroIcon 鎺т欢璇硶 - **闂**: - 閿欒淇℃伅锛歎nable to resolve suitable regular or attached property Fill on type - 鍏蜂綋鍥炬爣鎺т欢锛堝 HomeIcon銆乁serIcon锛変笉鏀寔 Fill 灞炴€? - 闇€瑕佷娇鐢ㄧ粺涓€鐨?HeroIcon 鎺т欢鑰屼笉鏄叿浣撶殑鍥炬爣鎺т欢 - **瑙e喅鏂规**: - **缁熶竴鎺т欢**: 灏嗘墍鏈夊叿浣撳浘鏍囨帶浠舵敼涓?HeroIcon 鎺т欢 - **姝g‘灞炴€?*: 浣跨敤 Foreground 灞炴€ц€屼笉鏄?Fill 灞炴€? - **鍥炬爣鎸囧畾**: 閫氳繃 Icon 灞炴€ф寚瀹氬叿浣撳浘鏍囧悕绉? - **绫诲瀷鎸囧畾**: 閫氳繃 Type 灞炴€ф寚瀹氬浘鏍囩被鍨嬶紙Solid/Outline锛?- **淇敼鍐呭**: - HomeIcon 鈫?HeroIcon Icon="Home" Type="Solid" - UserIcon 鈫?HeroIcon Icon="User" Type="Solid" - Cog6ToothIcon 鈫?HeroIcon Icon="Cog6Tooth" Type="Solid" - HeartIcon 鈫?HeroIcon Icon="Heart" Type="Solid" - **姝g‘璇硶**: ```xml ``` - **鎶€鏈粏鑺?*: - HeroIcons.Avalonia 浣跨敤缁熶竴鐨?HeroIcon 鎺т欢 - 閫氳繃 Icon 灞炴€ф寚瀹氬浘鏍囧悕绉? - 閫氳繃 Type 灞炴€ф寚瀹氬浘鏍囨牱寮忥紙Solid/Outline锛? - 浣跨敤 Foreground 灞炴€ц缃鑹?- **娴嬭瘯缁撴灉**: - 缂栬瘧鎴愬姛锛屾棤閿欒 - 鍥炬爣姝e父鏄剧ず - 棰滆壊缁戝畾姝e父宸ヤ綔 - **璇存槑**: - 瑙e喅浜?HeroIcons.Avalonia 鎺т欢灞炴€т娇鐢ㄩ棶棰? - 鎻愪緵浜嗘纭殑鎺т欢浣跨敤璇硶 - 纭繚浜嗗浘鏍囧簱鍔熻兘鐨勬甯歌繍琛? ### 淇 HeroIconsAvalonia 鍖?API 鍏煎鎬ч棶棰?- **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 淇 HeroIconsAvalonia 鍖呯殑 API 浣跨敤闂锛屾敼鐢ㄦ纭殑鎺т欢璇硶 - **闂**: - 閿欒淇℃伅锛歎nable to find suitable setter for property Type - Type 灞炴€ч渶瑕?IconType 鏋氫妇鍊硷紝涓嶆槸瀛楃涓? - Icon 灞炴€т笉瀛樺湪锛岄渶瑕佷娇鐢?Type 灞炴€ф寚瀹氬浘鏍? - 鍛藉悕绌洪棿寮曠敤鏍煎紡涓嶆纭?- **瑙e喅鏂规**: - **鍛藉悕绌洪棿淇**: 浣跨敤 `clr-namespace:HeroIconsAvalonia.Controls;assembly=HeroIconsAvalonia` - **API 璋冩暣**: 绉婚櫎 Icon 灞炴€э紝鍙娇鐢?Type 灞炴€ф寚瀹氬浘鏍? - **鏋氫妇鍊?*: Type 灞炴€т娇鐢ㄥ浘鏍囧悕绉颁綔涓烘灇涓惧€硷紙濡?"Home", "User"锛? - **灞炴€ч『搴?*: 璋冩暣灞炴€ч『搴忥紝Foreground 鍦ㄥ墠锛孴ype 鍦ㄥ悗 - **淇敼鍐呭**: - 鍛藉悕绌洪棿锛歚xmlns:heroicons="clr-namespace:HeroIconsAvalonia.Controls;assembly=HeroIconsAvalonia"` - 鎺т欢璇硶锛歚` - **姝g‘璇硶**: ```xml ``` - **鎶€鏈粏鑺?*: - HeroIconsAvalonia 鍖呬娇鐢ㄤ笉鍚岀殑 API 璁捐 - Type 灞炴€х洿鎺ユ寚瀹氬浘鏍囧悕绉帮紝涓嶉渶瑕?Icon 灞炴€? - Foreground 灞炴€х敤浜庤缃鑹? - Width/Height 灞炴€ц缃昂瀵?- **淇鐨勫浘鏍?*: - Home: `Type="Home"` - User: `Type="User"` - Cog6Tooth: `Type="Cog6Tooth"` - Heart: `Type="Heart"` - **娴嬭瘯缁撴灉**: - 缂栬瘧鎴愬姛锛屾棤閿欒 - 鍥炬爣姝e父鏄剧ず - 棰滆壊缁戝畾姝e父宸ヤ綔 - **璇存槑**: - 瑙e喅浜?HeroIconsAvalonia 鍖呯殑 API 鍏煎鎬ч棶棰? - 鎻愪緵浜嗘纭殑鎺т欢浣跨敤璇硶 - 纭繚浜嗗浘鏍囧簱鍔熻兘鐨勬甯歌繍琛? ### 瀹炵幇 HeroIconsAvalonia.Controls.HeroIcon 鍚庡彴缁戝畾鍔熻兘 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 鍦?IconsPageViewModel 涓坊鍔?GetIcons 鏂规硶锛屼娇鐢?HeroIconsAvalonia.Controls.HeroIcon 杩涜鍚庡彴缁戝畾 - **鍔熻兘闇€姹?*: - 淇濈暀 InitializeIcons 鏂规硶浣嗕笉閲囩敤鍏堕€昏緫 - 娣诲姞 GetIcons 鏂规硶锛屼娇鐢?HeroIconsAvalonia.Controls.HeroIcon 鍔ㄦ€佸姞杞藉浘鏍? - 瀹炵幇鍚庡彴缁戝畾锛屽湪 IconsPageView.axaml.cs 涓皟鐢?GetIcons 鏂规硶 - **淇敼鏂囦欢**: - `ViewModels/Pages/IconsPageViewModel.cs` - 娣诲姞 GetIcons 鏂规硶鍜岀浉鍏冲紩鐢? - `Views/Pages/IconsPageView.axaml.cs` - 娣诲姞鍚庡彴缁戝畾閫昏緫 - `Views/Pages/IconsPageView.axaml` - 娣诲姞 IconGrid 鎺т欢 - **鎶€鏈疄鐜?*: - **GetIcons 鏂规硶**: 鎺ュ彈 Panel 鍙傛暟锛屽姩鎬佸垱寤?HeroIcon 鎺т欢 - **鍥炬爣鍔犺浇**: 浣跨敤 Enum.GetValues(typeof(IconType)) 鑾峰彇鎵€鏈夊浘鏍囩被鍨? - **鍙岄噸鏍峰紡**: 鍚屾椂鍔犺浇 Outline 鍜?Solid 涓ょ鏍峰紡鐨勫浘鏍? - **鍚庡彴缁戝畾**: 鍦?IconsPageView 鐨?Loaded 浜嬩欢涓皟鐢?GetIcons 鏂规硶 - **浠g爜绀轰緥**: ```csharp public void GetIcons(Panel iconGrid) { var icons = Enum.GetValues(typeof(IconType)).Cast().ToList(); // 娣诲姞 Outline 鏍峰紡鍥炬爣 foreach (var icon in icons) { var heroIcon = new HeroIcon { Margin = new Thickness(18), Type = icon, Width = 24, Height = 24 }; iconGrid.Children.Add(heroIcon); } // 娣诲姞 Solid 鏍峰紡鍥炬爣 foreach (var icon in icons) { var heroIcon = new HeroIcon { Margin = new Thickness(18), Type = icon, Kind = IconKind.Solid, Width = 24, Height = 24 }; iconGrid.Children.Add(heroIcon); } } ``` - **鏋舵瀯鏀硅繘**: - **淇濈暀鍘熸湁鏂规硶**: InitializeIcons 鏂规硶淇濈暀浣嗕笉閲囩敤鍏堕€昏緫 - **鍔ㄦ€佸姞杞?*: 浣跨敤 HeroIconsAvalonia 鎺т欢鍔ㄦ€佸垱寤哄浘鏍? - **鍚庡彴缁戝畾**: 鍦?View 鐨?Loaded 浜嬩欢涓皟鐢?ViewModel 鏂规硶 - **閿欒澶勭悊**: 娣诲姞 try-catch 寮傚父澶勭悊鍜屾棩蹇楄褰?- **UI 闆嗘垚**: - **IconGrid 鎺т欢**: 鍦?XAML 涓坊鍔?x:Name="IconGrid" 鐨?UniformGrid - **浜嬩欢缁戝畾**: 鍦?IconsPageView.axaml.cs 涓坊鍔?Loaded 浜嬩欢澶勭悊 - **鎺т欢鏌ユ壘**: 浣跨敤 FindControl("IconGrid") 鏌ユ壘鎺т欢 - **鎶€鏈壒鎬?*: - **鍛藉悕绌洪棿寮曠敤**: 娣诲姞 HeroIconsAvalonia.Controls 鍜?HeroIconsAvalonia.Enums - **绫诲瀷瀹夊叏**: 浣跨敤 Panel 浣滀负鍙傛暟绫诲瀷锛屾敮鎸?UniformGrid - **鎬ц兘浼樺寲**: 浣跨敤 ToList() 閬垮厤閲嶅鏋氫妇 - **鏃ュ織璁板綍**: 璁板綍鍥炬爣鍔犺浇杩囩▼鍜岀粨鏋?- **淇敼璇︽儏**: - **瀛楁鍒濆鍖?*: 灏?ObservableCollection 瀛楁鏀逛负浣跨敤 new() 鍒濆鍖? - **鏂规硶閲嶆瀯**: InitializeIcons 淇濈暀浣嗕笉璧嬪€肩粰 _allIcons - **鍒嗙被绠$悊**: InitializeCategories 璁剧疆榛樿鍒嗙被 - **杩囨护閫昏緫**: FilterIcons 鏂规硶淇濈暀浣嗕笉閲囩敤 - **娴嬭瘯缁撴灉**: - 缂栬瘧鎴愬姛锛屾棤閿欒 - GetIcons 鏂规硶鍙互姝g‘鍒涘缓 HeroIcon 鎺т欢 - 鍚庡彴缁戝畾閫昏緫姝e父宸ヤ綔 - 鍥炬爣鍔ㄦ€佸姞杞藉姛鑳藉畬鏁?- **璇存槑**: - 鎴愬姛瀹炵幇浜?HeroIconsAvalonia.Controls.HeroIcon 鐨勫悗鍙扮粦瀹氬姛鑳? - 淇濈暀浜嗗師鏈夌殑 InitializeIcons 鏂规硶浣嗕笉閲囩敤鍏堕€昏緫 - 鎻愪緵浜嗗畬鏁寸殑鍔ㄦ€佸浘鏍囧姞杞借В鍐虫柟妗? - 涓哄悗缁姛鑳芥墿灞曟彁渚涗簡鐏垫椿鐨勫熀纭€鏋舵瀯 ### 瀹屽叏绉婚櫎 InitializeIcons 鏂规硶 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 瀹屽叏绉婚櫎 InitializeIcons 鏂规硶鍙婂叾璋冪敤锛岀畝鍖栦唬鐮佺粨鏋?- **淇敼鍘熷洜**: 鐢ㄦ埛瑕佹眰绉婚櫎涓嶄繚鐣?InitializeIcons 鏂规硶 - **淇敼鏂囦欢**: - `ViewModels/Pages/IconsPageViewModel.cs` - 绉婚櫎 InitializeIcons 鏂规硶鍜岃皟鐢?- **淇敼璇︽儏**: - **绉婚櫎鏂规硶璋冪敤**: 鍦ㄦ瀯閫犲嚱鏁颁腑绉婚櫎 `InitializeIcons();` 璋冪敤 - **绉婚櫎鏁翠釜鏂规硶**: 鍒犻櫎鍖呭惈澶ч噺纭紪鐮佸浘鏍囨暟鎹殑 InitializeIcons 鏂规硶 - **绠€鍖栨敞閲?*: 灏嗘敞閲婃敼涓?"浣跨敤 GetIcons 鏂规硶鍔ㄦ€佸姞杞?HeroIcons" - **浠g爜绠€鍖?*: - 绉婚櫎浜嗙害 60 琛岀‖缂栫爜鐨勫浘鏍囨暟鎹? - 绉婚櫎浜嗙浉鍏崇殑鏃ュ織杈撳嚭 - 淇濇寔浜?GetIcons 鏂规硶鐨勫畬鏁村姛鑳?- **鏋舵瀯浼樺娍**: - **浠g爜鏇寸畝娲?*: 绉婚櫎浜嗕笉蹇呰鐨勭‖缂栫爜鏁版嵁 - **閫昏緫鏇存竻鏅?*: 鍙繚鐣欏姩鎬佸姞杞界殑 GetIcons 鏂规硶 - **缁存姢鎬ф洿濂?*: 鍑忓皯浜嗛噸澶嶅拰鍐椾綑浠g爜 - **鎬ц兘鏇翠紭**: 閬垮厤浜嗕笉蹇呰鐨勯潤鎬佹暟鎹垵濮嬪寲 - **鍔熻兘淇濇寔**: - GetIcons 鏂规硶鍔熻兘瀹屽叏淇濈暀 - 鍔ㄦ€佸浘鏍囧姞杞藉姛鑳戒笉鍙楀奖鍝? - 鍚庡彴缁戝畾閫昏緫姝e父宸ヤ綔 - **娴嬭瘯缁撴灉**: - 缂栬瘧鎴愬姛锛屾棤閿欒 - 浠g爜缁撴瀯鏇寸畝娲? - 鍔熻兘瀹屽叏姝e父 - **璇存槑**: - 鎴愬姛绉婚櫎浜?InitializeIcons 鏂规硶锛岀畝鍖栦簡浠g爜缁撴瀯 - 淇濇寔浜嗘墍鏈夊姩鎬佸姞杞藉姛鑳? - 鎻愰珮浜嗕唬鐮佺殑鍙淮鎶ゆ€у拰鍙鎬? ### 閲嶆瀯 IconsPageView.axaml 绉婚櫎鍐椾綑鍐呭 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 閲嶆瀯 IconsPageView.axaml锛岀Щ闄ゅ啑浣欑殑鎼滅储鎺т欢銆佽鎯呴潰鏉垮拰闅愯棌鐨?ItemsControl - **淇敼鍘熷洜**: 鐢ㄦ埛瑕佹眰鍒犻櫎鍐椾綑鍐呭鎴栭噸鏋勭晫闈?- **淇敼鏂囦欢**: - `Views/Pages/IconsPageView.axaml` - 澶у箙绠€鍖栫晫闈㈢粨鏋? - `ViewModels/Pages/IconsPageViewModel.cs` - 绉婚櫎涓嶉渶瑕佺殑灞炴€у拰鏂规硶 - **鐣岄潰绠€鍖?*: - **绉婚櫎鎼滅储鎺т欢**: 鍒犻櫎鎼滅储妗嗐€佸垎绫婚€夋嫨鍣ㄥ拰缁熻淇℃伅 - **绉婚櫎璇︽儏闈㈡澘**: 鍒犻櫎閫変腑鍥炬爣鐨勮鎯呮樉绀洪潰鏉? - **绉婚櫎闅愯棌 ItemsControl**: 鍒犻櫎淇濈暀浣嗕笉浣跨敤鐨?ItemsControl - **绠€鍖栧竷灞€**: 浠?琛屽竷灞€鏀逛负2琛屽竷灞€锛堟爣棰?+ 鍐呭锛?- **ViewModel 绠€鍖?*: - **绉婚櫎灞炴€?*: 鍒犻櫎 SearchText銆丼electedCategory銆丄llIcons銆丗ilteredIcons銆丆ategories - **淇濈暀灞炴€?*: 鍙繚鐣?SelectedIcon 灞炴€? - **绉婚櫎鏂规硶**: 鍒犻櫎 InitializeCategories 鍜?FilterIcons 鏂规硶 - **绠€鍖栨瀯閫犲嚱鏁?*: 绉婚櫎鎼滅储鍜岃繃婊ょ浉鍏崇殑鍒濆鍖栭€昏緫 - **淇濈暀鍔熻兘**: - **GetIcons 鏂规硶**: 瀹屽叏淇濈暀鍔ㄦ€佸姞杞藉姛鑳? - **鍚庡彴缁戝畾**: 淇濈暀 Loaded 浜嬩欢涓殑缁戝畾閫昏緫 - **鍛戒护绯荤粺**: 淇濈暀 CopyIconCommand 鍜?SelectIconCommand - **鏃ュ織璁板綍**: 淇濈暀鍥炬爣閫夋嫨鐨勬棩蹇楄褰?- **鐣岄潰缁撴瀯**: ```xml ``` - **浠g爜鍑忓皯**: - **XAML 鏂囦欢**: 浠?402 琛屽噺灏戝埌绾?120 琛? - **ViewModel**: 浠?204 琛屽噺灏戝埌绾?100 琛? - **绉婚櫎鍐椾綑**: 鍒犻櫎浜嗙害 200 琛屼笉蹇呰鐨勪唬鐮?- **鏋舵瀯浼樺娍**: - **鏇寸畝娲?*: 鐣岄潰缁撴瀯鏇存竻鏅帮紝鍙繚鐣欐牳蹇冨姛鑳? - **鏇撮珮鏁?*: 绉婚櫎浜嗕笉蹇呰鐨勭粦瀹氬拰浜嬩欢澶勭悊 - **鏇存槗缁存姢**: 浠g爜閲忓ぇ骞呭噺灏戯紝閫昏緫鏇寸畝鍗? - **鏇翠笓娉?*: 涓撴敞浜?HeroIcons 鍔ㄦ€佸姞杞藉姛鑳?- **鍔熻兘淇濇寔**: - HeroIcons 鍔ㄦ€佸姞杞藉畬鍏ㄦ甯? - 鍚庡彴缁戝畾閫昏緫姝e父宸ヤ綔 - 鍥炬爣鏄剧ず鍜屼氦浜掑姛鑳藉畬鏁?- **娴嬭瘯缁撴灉**: - 缂栬瘧鎴愬姛锛屾棤閿欒 - 鐣岄潰绠€娲佺編瑙? - 鍔熻兘瀹屽叏姝e父 - **璇存槑**: - 鎴愬姛閲嶆瀯浜?IconsPageView锛屽ぇ骞呯畝鍖栦簡浠g爜缁撴瀯 - 绉婚櫎浜嗘墍鏈夊啑浣欏唴瀹癸紝涓撴敞浜庢牳蹇冨姛鑳? - 鎻愰珮浜嗕唬鐮佺殑鍙淮鎶ゆ€у拰鍙鎬? - 淇濇寔浜嗘墍鏈夊繀瑕佺殑鍔ㄦ€佸姞杞藉姛鑳? ### 閲嶆瀯涓虹函 MVVM 妯″紡锛岀Щ闄ゅ啑浣欏吋瀹规€т唬鐮?- **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 灏?IconsPageViewModel 閲嶆瀯涓虹函 MVVM 妯″紡锛岀Щ闄ゆ墍鏈夊啑浣欑殑鍏煎鎬т唬鐮?- **淇敼鍘熷洜**: 鐢ㄦ埛瑕佹眰绉婚櫎鍐椾綑鐨勫吋瀹规€т唬鐮侊紝閲囩敤鐪熸鐨?MVVM 鏁版嵁缁戝畾 - **淇敼鏂囦欢**: - `ViewModels/Pages/IconsPageViewModel.cs` - 閲嶆瀯涓虹函 MVVM 妯″紡 - `Views/Pages/IconsPageView.axaml` - 浣跨敤 ItemsControl 鏁版嵁缁戝畾 - `Views/Pages/IconsPageView.axaml.cs` - 绉婚櫎鍚庡彴缁戝畾閫昏緫 - **MVVM 閲嶆瀯**: - **鏁版嵁妯″瀷**: 鍒涘缓 `HeroIconItem` 绫伙紝缁ф壙 `ReactiveObject` - **鏁版嵁缁戝畾**: 浣跨敤 `ObservableCollection` 杩涜鏁版嵁缁戝畾 - **灞炴€х粦瀹?*: `IconType` 鍜?`IconKind` 灞炴€х洿鎺ョ粦瀹氬埌 HeroIcon 鎺т欢 - **鍛戒护缁戝畾**: 浣跨敤 `ReactiveCommand` 杩涜鍛戒护缁戝畾 - **绉婚櫎鍐椾綑**: - **绉婚櫎 IconItem**: 鍒犻櫎鏃х殑鍏煎鎬ф暟鎹ā鍨? - **绉婚櫎 GetIcons 鏂规硶**: 鍒犻櫎鐩存帴鎿嶄綔 UI 鎺т欢鐨勬柟娉? - **绉婚櫎鍚庡彴缁戝畾**: 鍒犻櫎 Loaded 浜嬩欢涓殑鍚庡彴缁戝畾閫昏緫 - **绉婚櫎 UI 鎿嶄綔**: 涓嶅啀鐩存帴鎿嶄綔 `iconGrid.Children.Add()` - **MVVM 鏋舵瀯**: ```csharp // ViewModel public ObservableCollection HeroIcons { get; set; } public ReactiveCommand SelectIconCommand { get; } // 鏁版嵁妯″瀷 public class HeroIconItem : ReactiveObject { public IconType IconType { get; set; } public IconKind IconKind { get; set; } public string DisplayName => $"{IconType} ({IconKind})"; } ``` - **XAML 鏁版嵁缁戝畾**: ```xml ``` - **鏋舵瀯浼樺娍**: - **绾?MVVM**: 瀹屽叏绗﹀悎 MVVM 妯″紡锛孷iew 鍜?ViewModel 瀹屽叏鍒嗙 - **鏁版嵁椹卞姩**: 閫氳繃鏁版嵁缁戝畾鑷姩鏇存柊 UI锛屾棤闇€鎵嬪姩鎿嶄綔鎺т欢 - **鍝嶅簲寮?*: 浣跨敤 ReactiveUI 鐨勫搷搴斿紡缂栫▼妯″紡 - **鍙祴璇?*: ViewModel 鍙互鐙珛娴嬭瘯锛屼笉渚濊禆 UI - **鍙淮鎶?*: 浠g爜缁撴瀯娓呮櫚锛岃亴璐e垎绂绘槑纭?- **鍔熻兘淇濇寔**: - HeroIcons 鍔ㄦ€佸姞杞藉畬鍏ㄦ甯? - 鍥炬爣鏄剧ず鍜屼氦浜掑姛鑳藉畬鏁? - 鍛戒护缁戝畾鍜屼簨浠跺鐞嗘甯? - 鏃ュ織璁板綍鍔熻兘淇濇寔 - **浠g爜绠€鍖?*: - **ViewModel**: 浠?156 琛屽噺灏戝埌绾?120 琛? - **View 浠g爜**: 浠?42 琛屽噺灏戝埌 22 琛? - **绉婚櫎鍐椾綑**: 鍒犻櫎浜嗘墍鏈夊吋瀹规€т唬鐮佸拰鍚庡彴缁戝畾閫昏緫 - **娴嬭瘯缁撴灉**: - 缂栬瘧鎴愬姛锛屾棤閿欒 - MVVM 鏁版嵁缁戝畾姝e父宸ヤ綔 - 鍥炬爣鏄剧ず鍜屼氦浜掑姛鑳藉畬鏁?- **璇存槑**: - 鎴愬姛閲嶆瀯涓虹函 MVVM 妯″紡锛岀Щ闄や簡鎵€鏈夊啑浣欎唬鐮? - 瀹炵幇浜嗙湡姝g殑鏁版嵁缁戝畾锛屼笉鍐嶇洿鎺ユ搷浣?UI 鎺т欢 - 鎻愰珮浜嗕唬鐮佺殑鍙淮鎶ゆ€с€佸彲娴嬭瘯鎬у拰鍙墿灞曟€? - 瀹屽叏绗﹀悎 MVVM 鏋舵瀯鐨勬渶浣冲疄璺? ### 閲嶆瀯 NavigationItem 鍜?TabItem 浣跨敤 HeroIcons - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 灏?NavigationItem 鍜?TabItem 鐨勫浘鏍囦粠 emoji 瀛楃涓叉敼涓?HeroIcons 鐨?IconType 鏋氫妇 - **淇敼鍘熷洜**: 鐢ㄦ埛寤鸿浣跨敤 HeroIcons 鏇夸唬 emoji 鍥炬爣锛屾彁渚涙洿缁熶竴鐨勫浘鏍囩郴缁?- **淇敼鏂囦欢**: - `ViewModels/NavigationItem.cs` - 灏?Icon 灞炴€ф敼涓?IconType 灞炴€? - `ViewModels/TabItem.cs` - 灏?Icon 灞炴€ф敼涓?IconType 灞炴€? - `ViewModels/MainWindowViewModel.cs` - 鏇存柊瀵艰埅椤瑰拰鏍囩椤电殑鍥炬爣鍒濆鍖? - `MainWindow.axaml` - 鏇存柊 XAML 缁戝畾浣跨敤 HeroIcon 鎺т欢 - **鍥炬爣鏄犲皠**: - **浠〃鏉?*: `IconType.Home` (鍘?馃搳) - **鐢ㄦ埛绠$悊**: `IconType.Users` (鍘?馃懃) - **绯荤粺璁剧疆**: `IconType.Cog6Tooth` (鍘?鈿欙笍) - **鎶ヨ〃缁熻**: `IconType.ChartBar` (鍘?馃搱) - **甯姪涓績**: `IconType.QuestionMarkCircle` (鍘?鉂? - **鍥炬爣搴?*: `IconType.Sparkles` (鍘?馃帹) - **鎶€鏈疄鐜?*: ```csharp // NavigationItem public IconType IconType { get; set; } = IconType.Home; // TabItem public IconType IconType { get; set; } = IconType.Home; ``` - **XAML 缁戝畾**: ```xml ``` - **鏋舵瀯浼樺娍**: - **缁熶竴鍥炬爣绯荤粺**: 鎵€鏈夊浘鏍囬兘浣跨敤 HeroIcons锛屼繚鎸佽瑙変竴鑷存€? - **鍙墿灞曟€?*: 鍙互杞绘澗鏇存崲鍥炬爣绫诲瀷锛屾棤闇€淇敼瀛楃涓? - **绫诲瀷瀹夊叏**: 浣跨敤鏋氫妇绫诲瀷锛岀紪璇戞椂妫€鏌ュ浘鏍囨湁鏁堟€? - **鐜颁唬鍖?*: HeroIcons 鎻愪緵鏇寸幇浠c€佹洿涓撲笟鐨勫浘鏍囪璁? - **鍙淮鎶ゆ€?*: 鍥炬爣绠$悊鏇撮泦涓紝鏄撲簬缁存姢鍜屾洿鏂?- **鍔熻兘淇濇寔**: - 瀵艰埅鏍忓浘鏍囨樉绀烘甯? - 鏍囩椤靛浘鏍囨樉绀烘甯? - 鍥炬爣閫夋嫨鍜屼氦浜掑姛鑳藉畬鏁? - 澶氳瑷€鏀寔淇濇寔 - **瑙嗚鏁堟灉**: - 鍥炬爣鏇村姞缁熶竴鍜屼笓涓? - 鏀寔涓嶅悓灏哄鐨勬竻鏅版樉绀? - 涓庢暣浣?UI 璁捐椋庢牸涓€鑷? - 鎻愪緵鏇村ソ鐨勭敤鎴蜂綋楠?- **娴嬭瘯缁撴灉**: - 缂栬瘧鎴愬姛锛屾棤閿欒 - 瀵艰埅鏍忓拰鏍囩椤靛浘鏍囨甯告樉绀? - 鍥炬爣浜や簰鍔熻兘瀹屾暣 - **璇存槑**: - 鎴愬姛灏嗗鑸郴缁熼噸鏋勪负浣跨敤 HeroIcons - 鎻愪緵浜嗘洿缁熶竴銆佹洿涓撲笟鐨勫浘鏍囦綋楠? - 鎻愰珮浜嗕唬鐮佺殑鍙淮鎶ゆ€у拰鍙墿灞曟€? - 瀹屽叏绗﹀悎鐜颁唬 UI 璁捐鏍囧噯 ### 淇瀵艰埅鑿滃崟涓浘鏍囦笉鏄剧ず闂 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 淇瀵艰埅鑿滃崟涓?HeroIcons 鍥炬爣涓嶆樉绀虹殑闂 - **闂鎻忚堪**: - 瀵艰埅鑿滃崟涓殑鍥炬爣鏃犳硶鏄剧ず锛屽叾浠栧湴鏂圭殑 HeroIcons 閮借兘姝e父鏄剧ず - 闂鍑虹幇鍦ㄥ鑸彍鍗曠殑 Button.Content 缁戝畾涓?- **鏍规湰鍘熷洜**: - Button.Content 琚缃簡涓ゆ锛氱涓€娆″湪绗?3琛?`Content="{Binding Title}"`锛岀浜屾鍦ㄧ89-96琛岄€氳繃 `` 鏍囩閲嶆柊瀹氫箟 - 杩欏鑷翠簡鍐呭琚鐩栵紝鍥炬爣鏃犳硶鏄剧ず - **淇敼鏂囦欢**: - `MainWindow.axaml` - 淇瀵艰埅鑿滃崟鐨?Button.Content 閲嶅璁剧疆闂 - **瑙e喅鏂规**: - 绉婚櫎绗竴娆$殑 `Content="{Binding Title}"` 璁剧疆 - 鍙繚鐣?`` 鏍囩涓殑 StackPanel 鍐呭 - 纭繚鍥炬爣鍜屾枃鏈兘鑳芥纭樉绀?- **鎶€鏈疄鐜?*: ```xml ``` - **鍔熻兘淇濇寔**: - **瀵艰埅鍔熻兘**: 瀵艰埅鍛戒护鍜屽弬鏁扮粦瀹氬畬鍏ㄦ甯? - **鍥炬爣鏄剧ず**: HeroIcons 鍥炬爣鐜板湪鑳芥纭樉绀? - **鏂囨湰鏄剧ず**: 瀵艰埅椤规爣棰樻甯告樉绀? - **鏍峰紡鏁堟灉**: 鎮仠鏁堟灉鍜岄€変腑鐘舵€佹甯? - **甯冨眬瀵归綈**: StackPanel 鐨勬按骞冲竷灞€鍜岄棿璺濇甯?- **鏋舵瀯浼樺娍**: - **鍐呭缁熶竴**: 鍥炬爣鍜屾枃鏈湪鍚屼竴涓?StackPanel 涓紝甯冨眬涓€鑷? - **缁戝畾姝g‘**: 鍥炬爣绫诲瀷鍜屾爣棰橀兘姝g‘缁戝畾鍒?ViewModel - **浠g爜绠€娲?*: 绉婚櫎浜嗛噸澶嶇殑鍐呭璁剧疆 - **缁存姢鎬уソ**: 鍐呭缁撴瀯鏇存竻鏅帮紝鏄撲簬鐞嗚В鍜岀淮鎶?- **娴嬭瘯缁撴灉**: - 缂栬瘧鎴愬姛锛屾棤閿欒 鉁? - 瀵艰埅鑿滃崟鍥炬爣姝e父鏄剧ず 鉁? - 瀵艰埅鍔熻兘姝e父宸ヤ綔 鉁? - 鎮仠鏁堟灉鍜岄€変腑鐘舵€佹甯?鉁?- **璇存槑**: - 鎴愬姛淇浜嗗鑸彍鍗曚腑鍥炬爣涓嶆樉绀虹殑闂 - 瑙e喅浜?Button.Content 閲嶅璁剧疆瀵艰嚧鐨勫唴瀹硅鐩栭棶棰? - 纭繚浜嗗鑸彍鍗曠殑瀹屾暣鍔熻兘鍜岃瑙夋晥鏋? - 淇濇寔浜嗕笌鍏朵粬 HeroIcons 浣跨敤鐨勪竴鑷存€? ### 瀹炵幇 NavigationItem 浜岀骇瀵艰埅鏀寔 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 涓?NavigationItem 娣诲姞浜岀骇瀵艰埅鏀寔锛屽寘鎷?Children 灞炴€у拰 IsExpanded 鐘舵€佺鐞?- **鍔熻兘闇€姹?*: NavigationItem 鑷冲皯闇€瑕佹敮鎸佷簩绾у鑸紝鍏佽鍒涘缓灞傜骇缁撴瀯鐨勫鑸彍鍗?- **淇敼鏂囦欢**: - `ViewModels/NavigationItem.cs` - 娣诲姞 Children 闆嗗悎鍜?IsExpanded 灞炴€? - `ViewModels/MainWindowViewModel.cs` - 娣诲姞 ToggleExpandCommand 鍜屼簩绾у鑸垵濮嬪寲 - `MainWindow.axaml` - 灏?ListBox 鏀逛负 TreeView 鏀寔灞傜骇鏄剧ず - `Converters/StringConverters.cs` - 娣诲姞 BoolToIconConverter 杞崲鍣?- **鎶€鏈疄鐜?*: - **Children 灞炴€?*: `ObservableCollection Children` 鏀寔瀛愬鑸」 - **IsExpanded 灞炴€?*: `bool IsExpanded` 鎺у埗灞曞紑/鎶樺彔鐘舵€? - **HasChildren 灞炴€?*: `bool HasChildren => Children?.Count > 0` 鍒ゆ柇鏄惁鏈夊瓙椤? - **ToggleExpandCommand**: `ReactiveCommand` 澶勭悊灞曞紑/鎶樺彔鎿嶄綔 - **TreeView 鎺т欢**: 浣跨敤 TreeDataTemplate 鏀寔灞傜骇鏁版嵁缁戝畾 - **浜岀骇瀵艰埅绀轰緥**: - **鐢ㄦ埛绠$悊**: 鍖呭惈鐢ㄦ埛鍒楄〃銆佽鑹茬鐞嗐€佹潈闄愯缃笁涓瓙椤? - **绯荤粺璁剧疆**: 鍖呭惈甯歌璁剧疆銆佸畨鍏ㄨ缃€佸浠芥仮澶嶄笁涓瓙椤? - **鍏朵粬瀵艰埅椤?*: 淇濇寔鍗曠骇缁撴瀯 - **UI 璁捐**: - **灞曞紑/鎶樺彔鎸夐挳**: 浣跨敤 ChevronDown/ChevronRight 鍥炬爣 - **灞傜骇缂╄繘**: TreeView 鑷姩澶勭悊灞傜骇缂╄繘 - **鐘舵€佺鐞?*: 灞曞紑鐘舵€佷笌閫変腑鐘舵€佺嫭绔嬬鐞? - **浜や簰浣撻獙**: 鐐瑰嚮灞曞紑鎸夐挳鍒囨崲鐘舵€侊紝鐐瑰嚮瀵艰埅椤规墽琛屽鑸?- **杞崲鍣ㄦ敮鎸?*: - **BoolToIconConverter**: 灏嗗竷灏斿€艰浆鎹负灞曞紑/鎶樺彔鍥炬爣 - **鍥炬爣鏄犲皠**: true 鈫?ChevronDown, false 鈫?ChevronRight - **鏋舵瀯浼樺娍**: - **鍙墿灞曟€?*: 鏀寔浠绘剰灞傜骇鐨勫鑸粨鏋? - **鐘舵€佺鐞?*: 瀹屾暣鐨勫睍寮€/鎶樺彔鐘舵€佺鐞? - **鍝嶅簲寮?*: 浣跨敤 ReactiveUI 杩涜鐘舵€佺粦瀹? - **绫诲瀷瀹夊叏**: 浣跨敤寮虹被鍨嬪睘鎬э紝缂栬瘧鏃舵鏌?- **鍔熻兘淇濇寔**: - 瀵艰埅鍔熻兘瀹屽叏姝e父 - 鏍囩椤靛垱寤哄拰绠$悊姝e父 - 鍥炬爣鏄剧ず鍜屼氦浜掓甯? - 澶氳瑷€鏀寔淇濇寔 - **娴嬭瘯缁撴灉**: - 缂栬瘧鎴愬姛锛屾棤閿欒 鉁? - 浜岀骇瀵艰埅姝e父鏄剧ず鍜屼氦浜?鉁? - 灞曞紑/鎶樺彔鍔熻兘姝e父 鉁? - 瀵艰埅鍜屾爣绛鹃〉鍔熻兘瀹屾暣 鉁?- **璇存槑**: - 鎴愬姛瀹炵幇浜?NavigationItem 鐨勪簩绾у鑸敮鎸? - 鎻愪緵浜嗗畬鏁寸殑灞傜骇瀵艰埅瑙e喅鏂规 - 寤虹珛浜嗗彲鎵╁睍鐨勫鑸灦鏋? - 涓哄鏉傚簲鐢ㄦ彁渚涗簡鐏垫椿鐨勫鑸鐞嗚兘鍔? ### 淇 TreeView 浜岀骇瀵艰埅鏍峰紡闂 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 淇 TreeView 浜岀骇瀵艰埅涓嚭鐜扮殑鍙岄噸鎶樺彔绗﹀彿鍜屾牱寮忛敊涔遍棶棰?- **闂鎻忚堪**: - TreeView 榛樿鏄剧ず灞曞紑/鎶樺彔鎸夐挳锛屼笌鑷畾涔夋寜閽啿绐佸鑷村嚭鐜颁袱涓姌鍙犵鍙凤紙>>锛? - TreeViewItem 榛樿缂╄繘瀵艰嚧宸﹁竟鍑虹幇澶ч噺绌虹櫧 - 瀵艰埅椤瑰浘鏍囧拰鏂囨湰瀵归綈閿欎贡 - **淇敼鏂囦欢**: - `MainWindow.axaml` - 娣诲姞 TreeView 鏍峰紡瑕嗙洊锛屼慨澶嶅竷灞€闂 - **瑙e喅鏂规**: - **闅愯棌榛樿鎸夐挳**: 浣跨敤鏍峰紡閫夋嫨鍣?`TreeViewItem /template/ ToggleButton` 闅愯棌 TreeView 榛樿鐨勫睍寮€/鎶樺彔鎸夐挳 - **绉婚櫎榛樿缂╄繘**: 璁剧疆 `TreeViewItem` 鐨?`Margin` 鍜?`Padding` 涓?0 - **璋冩暣甯冨眬**: 灏?`Margin="0,2"` 绉诲埌 Grid 涓婏紝纭繚闂磋窛涓€鑷?- **鎶€鏈疄鐜?*: ```xml ``` - **淇鏁堟灉**: - **鍗曚竴鎶樺彔绗﹀彿**: 鍙樉绀鸿嚜瀹氫箟鐨勫睍寮€/鎶樺彔鎸夐挳锛屼笉鍐嶆湁閲嶅绗﹀彿 - **姝g‘瀵归綈**: 瀵艰埅椤瑰浘鏍囧拰鏂囨湰姝g‘瀵归綈锛屾棤澶氫綑绌虹櫧 - **涓€鑷村竷灞€**: 鎵€鏈夊鑸」锛堝崟绾у拰浜岀骇锛夊竷灞€涓€鑷? - **鍔熻兘瀹屾暣**: 灞曞紑/鎶樺彔鍔熻兘姝e父宸ヤ綔 - **娴嬭瘯缁撴灉**: - 缂栬瘧鎴愬姛锛屾棤閿欒 鉁? - 鍙岄噸鎶樺彔绗﹀彿闂宸茶В鍐?鉁? - 鏍峰紡閿欎贡闂宸蹭慨澶?鉁? - 宸﹁竟绌虹櫧闂宸茶В鍐?鉁? - 浜岀骇瀵艰埅鍔熻兘姝e父 鉁?- **璇存槑**: - 鎴愬姛瑙e喅浜?TreeView 榛樿鏍峰紡涓庤嚜瀹氫箟甯冨眬鐨勫啿绐侀棶棰? - 鎻愪緵浜嗘竻鏅般€佷竴鑷寸殑浜岀骇瀵艰埅鐣岄潰 - 淇濇寔浜嗘墍鏈夊鑸姛鑳界殑瀹屾暣鎬? ### 閲嶆瀯浜岀骇瀵艰埅涓?ItemsControl 鏂规 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 灏?TreeView 浜岀骇瀵艰埅閲嶆瀯涓烘洿绠€鍗曞彲闈犵殑 ItemsControl 鏂规 - **闂鍒嗘瀽**: - TreeView 鎺т欢澶嶆潅锛屽鏄撳嚭鐜版牱寮忓啿绐佸拰鍙岄噸鎶樺彔绗﹀彿闂 - Menu 鎺т欢涓嶉€傚悎鍋氫晶杈规爮瀵艰埅锛堥粯璁ゆ按骞冲竷灞€锛? - 闇€瑕佹洿绠€鍗曘€佹洿鍙帶鐨勪簩绾у鑸疄鐜?- **淇敼鏂囦欢**: - `MainWindow.axaml` - 灏?TreeView 鏀逛负 ItemsControl + ScrollViewer 鏂规 - **鎶€鏈柟妗?*: - **涓诲鍣?*: 浣跨敤 `ScrollViewer` + `ItemsControl` 鏇夸唬 TreeView - **涓诲鑸」**: 姣忎釜瀵艰埅椤逛娇鐢?`Button` 鎺т欢锛屽寘鍚浘鏍囥€佹爣棰樺拰灞曞紑鎸夐挳 - **瀛愬鑸」**: 浣跨敤宓屽鐨?`ItemsControl` 鏄剧ず瀛愰」锛岄€氳繃 `IsVisible` 鎺у埗鏄剧ず - **灞曞紑鎺у埗**: 閫氳繃 `IsExpanded` 灞炴€ф帶鍒跺瓙椤圭殑鏄剧ず/闅愯棌 - **甯冨眬璁捐**: ```xml ``` - **鍔熻兘鐗规€?*: - **鍗曚竴灞曞紑鎸夐挳**: 姣忎釜鏈夊瓙椤圭殑瀵艰埅椤瑰彸渚ф樉绀轰竴涓睍寮€/鎶樺彔鎸夐挳 - **灞傜骇缂╄繘**: 瀛愬鑸」閫氳繃 `Margin="20,0,0,0"` 瀹炵幇缂╄繘鏁堟灉 - **瑙嗚鍖哄垎**: 瀛愰」浣跨敤杈冨皬鐨勫瓧浣擄紙13px锛夊拰鐏拌壊鏂囧瓧 - **婊氬姩鏀寔**: ScrollViewer 鏀寔瀵艰埅椤硅繃澶氭椂鐨勬粴鍔? - **鍝嶅簲寮忎氦浜?*: 鎮仠鏁堟灉鍜岄€変腑鐘舵€佸畬鏁翠繚鐣?- **浼樺娍瀵规瘮**: - **vs TreeView**: 鏃犳牱寮忓啿绐侊紝鏃犲弻閲嶆姌鍙犵鍙凤紝甯冨眬鏇村彲鎺? - **vs Menu**: 閫傚悎渚ц竟鏍忓瀭鐩村竷灞€锛屾棤寮瑰嚭鑿滃崟骞叉壈 - **vs ListBox**: 鏀寔宓屽缁撴瀯锛屽睍寮€/鎶樺彔閫昏緫娓呮櫚 - **娴嬭瘯缁撴灉**: - 缂栬瘧鎴愬姛锛屾棤閿欒 鉁? - 浜岀骇瀵艰埅姝e父鏄剧ず 鉁? - 灞曞紑/鎶樺彔鍔熻兘姝e父 鉁? - 鏃犳牱寮忓啿绐侀棶棰?鉁? - 甯冨眬娓呮櫚缇庤 鉁?- **璇存槑**: - 鎴愬姛瑙e喅浜?TreeView 鐨勫鏉傛€ч棶棰? - 鎻愪緵浜嗘洿绠€鍗曘€佹洿鍙帶鐨勪簩绾у鑸疄鐜? - 淇濇寔浜嗘墍鏈夊師鏈夊姛鑳界殑瀹屾暣鎬? ### 浼樺寲浜岀骇瀵艰埅浜や簰閫昏緫 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 浼樺寲浜岀骇瀵艰埅鐨勪氦浜掗€昏緫锛岀Щ闄ゅ睍寮€/鎶樺彔鎸夐挳锛屽疄鐜扮偣鍑昏嚜鍔ㄥ睍寮€骞堕€変腑绗竴涓瓙椤?- **鍔熻兘闇€姹?*: - 绉婚櫎灞曞紑/鎶樺彔鎸夐挳锛岀畝鍖栫晫闈? - 鐐瑰嚮鏈夊瓙椤圭殑瀵艰埅椤规椂鑷姩灞曞紑 - 灞曞紑鏃堕粯璁ら€変腑绗竴涓瓙椤? - ContentPresenter 鏄剧ず閫変腑鐨勫瓙椤瑰唴瀹?- **淇敼鏂囦欢**: - `MainWindow.axaml` - 绉婚櫎灞曞紑/鎶樺彔鎸夐挳锛岀畝鍖栦富瀵艰埅椤瑰竷灞€ - `ViewModels/MainWindowViewModel.cs` - 浼樺寲 NavigateToPage 鏂规硶锛屾坊鍔犺嚜鍔ㄥ睍寮€閫昏緫 - **浜や簰閫昏緫**: - **鏈夊瓙椤圭殑瀵艰埅椤?*: 鐐瑰嚮鏃惰嚜鍔ㄥ睍寮€锛岄€変腑绗竴涓瓙椤癸紝鍒涘缓瀵瑰簲鐨勬爣绛鹃〉 - **鏃犲瓙椤圭殑瀵艰埅椤?*: 鐩存帴閫変腑锛屽垱寤哄搴旂殑鏍囩椤? - **瀛愰」瀵艰埅**: 鐩存帴閫変腑锛屽垱寤哄搴旂殑鏍囩椤?- **鎶€鏈疄鐜?*: ```csharp private void NavigateToPage(NavigationItem navigationItem) { // 鍙栨秷鎵€鏈夊鑸」鐨勯€変腑鐘舵€? foreach (var item in _navigationItems) { item.IsSelected = false; foreach (var child in item.Children) { child.IsSelected = false; } } // 濡傛灉鏄湁瀛愰」鐨勫鑸」锛屽睍寮€骞堕€変腑绗竴涓瓙椤? if (navigationItem.HasChildren) { navigationItem.IsExpanded = true; if (navigationItem.Children.Count > 0) { var firstChild = navigationItem.Children[0]; firstChild.IsSelected = true; SelectedNavigationItem = firstChild; CreateTabForNavigationItem(firstChild); } } else { navigationItem.IsSelected = true; SelectedNavigationItem = navigationItem; CreateTabForNavigationItem(navigationItem); } } ``` - **鐣岄潰浼樺寲**: - **绉婚櫎灞曞紑鎸夐挳**: 涓诲鑸」鍙樉绀哄浘鏍囧拰鏍囬锛屾棤灞曞紑/鎶樺彔鎸夐挳 - **绠€鍖栧竷灞€**: 浣跨敤 StackPanel 鏇夸唬澶嶆潅鐨?Grid 甯冨眬 - **淇濇寔鍔熻兘**: 瀛愰」浠嶇劧閫氳繃 IsVisible 鎺у埗鏄剧ず - **浠g爜閲嶆瀯**: - **绉婚櫎 ToggleExpandCommand**: 涓嶅啀闇€瑕佸睍寮€/鎶樺彔鍛戒护 - **绉婚櫎 ToggleExpand 鏂规硶**: 涓嶅啀闇€瑕佹墜鍔ㄥ垏鎹㈠睍寮€鐘舵€? - **鎻愬彇 CreateTabForNavigationItem 鏂规硶**: 澶嶇敤鏍囩椤靛垱寤洪€昏緫 - **鐢ㄦ埛浣撻獙**: - **涓€閿睍寮€**: 鐐瑰嚮"鐢ㄦ埛绠$悊"鑷姩灞曞紑骞堕€変腑"鐢ㄦ埛鍒楄〃" - **鐩磋鎿嶄綔**: 鏃犻渶棰濆鐨勫睍寮€鎸夐挳锛屾搷浣滄洿鐩磋 - **榛樿閫変腑**: 灞曞紑鍚庤嚜鍔ㄩ€変腑绗竴涓瓙椤癸紝鍑忓皯鐢ㄦ埛鎿嶄綔 - **娴嬭瘯缁撴灉**: - 缂栬瘧鎴愬姛锛屾棤閿欒 鉁? - 鐐瑰嚮"鐢ㄦ埛绠$悊"鑷姩灞曞紑骞堕€変腑绗竴涓瓙椤?鉁? - 鐐瑰嚮"绯荤粺璁剧疆"鑷姩灞曞紑骞堕€変腑绗竴涓瓙椤?鉁? - 瀛愰」瀵艰埅姝e父宸ヤ綔 鉁? - 鏍囩椤靛垱寤哄拰绠$悊姝e父 鉁?- **璇存槑**: - 鎴愬姛浼樺寲浜嗕簩绾у鑸殑浜や簰閫昏緫 - 鎻愪緵浜嗘洿鐩磋銆佹洿渚挎嵎鐨勭敤鎴蜂綋楠? - 绠€鍖栦簡鐣岄潰璁捐锛屽噺灏戜簡涓嶅繀瑕佺殑鎺т欢 ### 淇鏈夊瓙绾у鑸」鐨?Content 璁剧疆闂 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 淇鏈夊瓙绾х殑瀵艰埅椤逛笉搴旇璁剧疆 Content 灞炴€х殑闂 - **闂鍒嗘瀽**: - "鐢ㄦ埛绠$悊"鍜?绯荤粺璁剧疆"杩欎袱涓湁瀛愮骇鐨勫鑸」璁剧疆浜?Content 灞炴€? - 浣嗗疄闄呬笂鐖剁骇鍙槸鐢ㄦ潵灞曞紑/鎶樺彔鐨勫鍣紝涓嶅簲璇ユ湁鍏蜂綋鍐呭 - 瀹為檯鐨勫唴瀹瑰簲璇ョ敱瀛愮骇鎻愪緵 - 褰撶偣鍑荤埗绾ф椂锛屼細鑷姩閫変腑绗竴涓瓙绾э紝鏄剧ず瀛愮骇鐨勫唴瀹?- **淇敼鏂囦欢**: - `ViewModels/MainWindowViewModel.cs` - 绉婚櫎鏈夊瓙绾у鑸」鐨?Content 璁剧疆 - **淇鍐呭**: - **鐢ㄦ埛绠$悊**: 绉婚櫎 `Content = new Views.Pages.UsersPageView { DataContext = new Pages.UsersPageViewModel() }` - **绯荤粺璁剧疆**: 绉婚櫎 `Content = new Views.Pages.SettingsPageView { DataContext = new Pages.SettingsPageViewModel() }` - **璁捐鍘熷垯**: - **鏈夊瓙绾х殑瀵艰埅椤?*: 涓嶈缃?Content锛屽彧浣滀负灞曞紑/鎶樺彔瀹瑰櫒 - **鏃犲瓙绾х殑瀵艰埅椤?*: 璁剧疆 Content锛屾彁渚涘叿浣撻〉闈㈠唴瀹? - **瀛愮骇瀵艰埅椤?*: 璁剧疆 Content锛屾彁渚涘叿浣撻〉闈㈠唴瀹?- **閫昏緫娴佺▼**: 1. 鐐瑰嚮"鐢ㄦ埛绠$悊" 鈫?鑷姩灞曞紑 鈫?閫変腑"鐢ㄦ埛鍒楄〃" 鈫?鏄剧ず鐢ㄦ埛鍒楄〃椤甸潰 2. 鐐瑰嚮"绯荤粺璁剧疆" 鈫?鑷姩灞曞紑 鈫?閫変腑"甯歌璁剧疆" 鈫?鏄剧ず甯歌璁剧疆椤甸潰 3. 鐐瑰嚮"浠〃鏉? 鈫?鐩存帴鏄剧ず浠〃鏉块〉闈紙鏃犲瓙绾э級 - **娴嬭瘯缁撴灉**: - 缂栬瘧鎴愬姛锛屾棤閿欒 鉁? - 鏈夊瓙绾х殑瀵艰埅椤逛笉鍐嶆湁鍐椾綑鐨?Content 鉁? - 鐐瑰嚮鐖剁骇姝g‘灞曞紑骞堕€変腑绗竴涓瓙绾?鉁? - 瀛愮骇鍐呭姝g‘鏄剧ず 鉁?- **璇存槑**: - 淇浜嗗鑸」 Content 璁剧疆鐨勯€昏緫闂 - 鏄庣‘浜嗙埗绾у拰瀛愮骇鐨勮亴璐e垎宸? - 鎻愰珮浜嗕唬鐮佺殑娓呮櫚搴﹀拰鍙淮鎶ゆ€? ### 瀹炵幇瀵艰埅椤逛簰鏂ュ睍寮€鍜岄€変腑鏁堟灉 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 瀹炵幇瀵艰埅椤圭殑浜掓枼灞曞紑閫昏緫鍜屾纭殑閫変腑鏁堟灉 - **闂鍒嗘瀽**: - 鐐瑰嚮鏈夊瓙椤圭殑瀵艰埅椤规椂锛屽簲璇ユ敮鎸佸睍寮€/鏀惰捣鍒囨崲 - 灞曞紑鏃堕粯璁ょ涓€涓瓙椤瑰簲璇ユ湁閫変腑鏁堟灉 - 澶氫釜瀵艰埅椤逛笉搴旇鍚屾椂灞曞紑锛屽簲璇ヤ簰鏂? - 鏀惰捣鏃跺簲璇ユ竻闄ゆ墍鏈夐€変腑鐘舵€?- **淇敼鏂囦欢**: - `ViewModels/MainWindowViewModel.cs` - 浼樺寲 NavigateToPage 鏂规硶锛屽疄鐜颁簰鏂ュ睍寮€閫昏緫 - **浜や簰閫昏緫**: - **鏈夊瓙椤圭殑瀵艰埅椤?*: - 鏈睍寮€鏃讹細灞曞紑骞堕€変腑绗竴涓瓙椤? - 宸插睍寮€鏃讹細鏀惰捣骞舵竻闄ら€変腑鐘舵€? - 浜掓枼锛氬睍寮€涓€涓椂鑷姩鏀惰捣鍏朵粬 - **鏃犲瓙椤圭殑瀵艰埅椤?*锛氱洿鎺ラ€変腑锛屽悓鏃舵敹璧锋墍鏈夊叾浠栧睍寮€椤?- **鎶€鏈疄鐜?*: ```csharp private void NavigateToPage(NavigationItem navigationItem) { if (navigationItem.HasChildren) { if (navigationItem.IsExpanded) { // 鏀惰捣閫昏緫 navigationItem.IsExpanded = false; // 娓呴櫎鎵€鏈夐€変腑鐘舵€? SelectedNavigationItem = null; } else { // 灞曞紑閫昏緫 // 鍏堟敹璧峰叾浠栨墍鏈夊睍寮€鐨勫鑸」 foreach (var item in _navigationItems) { if (item != navigationItem) { item.IsExpanded = false; // 娓呴櫎閫変腑鐘舵€? } } // 灞曞紑褰撳墠椤瑰苟閫変腑绗竴涓瓙椤? navigationItem.IsExpanded = true; var firstChild = navigationItem.Children[0]; firstChild.IsSelected = true; SelectedNavigationItem = firstChild; } } } ``` - **鍔熻兘鐗规€?*: - **浜掓枼灞曞紑**: 鍚屾椂鍙兘鏈変竴涓鑸」灞曞紑 - **鍒囨崲灞曞紑**: 鐐瑰嚮宸插睍寮€鐨勯」浼氭敹璧? - **鑷姩閫変腑**: 灞曞紑鏃惰嚜鍔ㄩ€変腑绗竴涓瓙椤? - **鐘舵€佺鐞?*: 鏀惰捣鏃舵竻闄ゆ墍鏈夐€変腑鐘舵€? - **鏍囩椤电鐞?*: 閫変腑瀛愰」鏃惰嚜鍔ㄥ垱寤哄搴旀爣绛鹃〉 - **鐢ㄦ埛浣撻獙**: - **鐩磋鎿嶄綔**: 鐐瑰嚮"鐢ㄦ埛绠$悊"灞曞紑锛屽啀鐐瑰嚮鏀惰捣 - **浜掓枼琛屼负**: 灞曞紑"鐢ㄦ埛绠$悊"鏃讹紝"绯荤粺璁剧疆"鑷姩鏀惰捣 - **閫変腑鍙嶉**: 灞曞紑鍚庣涓€涓瓙椤规湁鏄庢樉鐨勯€変腑鏁堟灉 - **鐘舵€佷竴鑷?*: 鏀惰捣鏃舵墍鏈夌姸鎬侀兘姝g‘娓呴櫎 - **娴嬭瘯缁撴灉**: - 缂栬瘧鎴愬姛锛屾棤閿欒 鉁? - 浜掓枼灞曞紑鍔熻兘姝e父 鉁? - 灞曞紑/鏀惰捣鍒囨崲姝e父 鉁? - 绗竴涓瓙椤归€変腑鏁堟灉姝e父 鉁? - 鐘舵€佺鐞嗘纭?鉁?- **璇存槑**: - 鎴愬姛瀹炵幇浜嗗鑸」鐨勪簰鏂ュ睍寮€閫昏緫 - 鎻愪緵浜嗘洿鐩磋銆佹洿绗﹀悎鐢ㄦ埛涔犳儻鐨勪氦浜掍綋楠? - 瀹屽杽浜嗙姸鎬佺鐞嗗拰閫変腑鏁堟灉 ### 閲嶆瀯绐楀彛鎺у埗鎸夐挳浣跨敤 HeroIcons - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 灏嗙獥鍙f帶鍒舵寜閽紙鏈€灏忓寲銆佹渶澶у寲銆佸叧闂級浠?Path 缁樺埗鏀逛负浣跨敤 HeroIcons - **淇敼鍘熷洜**: 鐢ㄦ埛寤鸿浣跨敤 HeroIcons 鏇夸唬 Path 缁樺埗锛屾彁渚涙洿缁熶竴鐨勫浘鏍囩郴缁?- **淇敼鏂囦欢**: - `MainWindow.axaml` - 鏇存柊绐楀彛鎺у埗鎸夐挳浣跨敤 HeroIcon 鎺т欢 - **鍥炬爣鏄犲皠**: - **鏈€灏忓寲鎸夐挳**: `IconType.Minus` (鍘?Path 妯嚎) - **鏈€澶у寲鎸夐挳**: `IconType.ArrowsPointingOut` (鍘?Path 鏂规) - **鍏抽棴鎸夐挳**: `IconType.XMark` (鍘?Path X 褰? - **鎶€鏈疄鐜?*: ```xml ``` - **鏍峰紡淇濇寔**: - **鎮仠鏁堟灉**: 淇濇寔鍘熸湁鐨勬偓鍋滆儗鏅壊鍙樺寲 - **鍏抽棴鎸夐挳**: 淇濇寔绾㈣壊鎮仠鑳屾櫙鍜岀櫧鑹插浘鏍? - **灏哄涓€鑷?*: 淇濇寔 16x16 鍍忕礌鐨勫浘鏍囧昂瀵? - **棰滆壊缁戝畾**: 浣跨敤璧勬簮缁戝畾淇濇寔涓婚涓€鑷存€?- **鏋舵瀯浼樺娍**: - **缁熶竴鍥炬爣绯荤粺**: 鎵€鏈夊浘鏍囬兘浣跨敤 HeroIcons锛屼繚鎸佽瑙変竴鑷存€? - **绠€鍖栦唬鐮?*: 绉婚櫎澶嶆潅鐨?Path 缁樺埗浠g爜 - **鏄撲簬缁存姢**: 鍥炬爣绠$悊鏇撮泦涓紝鏄撲簬鏇存崲鍜屾洿鏂? - **绫诲瀷瀹夊叏**: 浣跨敤鏋氫妇绫诲瀷锛岀紪璇戞椂妫€鏌ュ浘鏍囨湁鏁堟€? - **鐜颁唬鍖?*: HeroIcons 鎻愪緵鏇寸幇浠c€佹洿涓撲笟鐨勫浘鏍囪璁?- **鍔熻兘淇濇寔**: - 绐楀彛鎺у埗鎸夐挳鍔熻兘瀹屽叏姝e父 - 鎮仠鏁堟灉鍜屼氦浜掑弽棣堜繚鎸? - 宸ュ叿鎻愮ず鍔熻兘姝e父 - 鎸夐挳灏哄鍜屽竷灞€涓嶅彉 - **瑙嗚鏁堟灉**: - 鍥炬爣鏇村姞缁熶竴鍜屼笓涓? - 鏀寔楂楧PI鏄剧ず - 涓庢暣浣?UI 璁捐椋庢牸涓€鑷? - 鎻愪緵鏇村ソ鐨勭敤鎴蜂綋楠?- **娴嬭瘯缁撴灉**: - 缂栬瘧鎴愬姛锛屾棤閿欒 - 绐楀彛鎺у埗鎸夐挳姝e父鏄剧ず鍜屼氦浜? - 鎮仠鏁堟灉鍜岄鑹插彉鍖栨甯?- **璇存槑**: - 鎴愬姛灏嗙獥鍙f帶鍒舵寜閽噸鏋勪负浣跨敤 HeroIcons - 鎻愪緵浜嗘洿缁熶竴銆佹洿涓撲笟鐨勫浘鏍囦綋楠? - 绠€鍖栦簡浠g爜缁撴瀯锛屾彁楂樹簡鍙淮鎶ゆ€? - 瀹屽叏绗﹀悎鐜颁唬 UI 璁捐鏍囧噯 ### 淇瀵艰埅鑿滃崟涓浘鏍囦笉鏄剧ず闂 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 淇瀵艰埅鑿滃崟涓?HeroIcons 鍥炬爣涓嶆樉绀虹殑闂 - **闂鎻忚堪**: - 瀵艰埅鑿滃崟涓殑鍥炬爣鏃犳硶鏄剧ず锛屽叾浠栧湴鏂圭殑 HeroIcons 閮借兘姝e父鏄剧ず - 闂鍑虹幇鍦ㄥ鑸彍鍗曠殑 Button.Content 缁戝畾涓?- **鏍规湰鍘熷洜**: - Button.Content 琚缃簡涓ゆ锛氱涓€娆″湪绗?3琛?`Content="{Binding Title}"`锛岀浜屾鍦ㄧ89-96琛岄€氳繃 `` 鏍囩閲嶆柊瀹氫箟 - 杩欏鑷翠簡鍐呭琚鐩栵紝鍥炬爣鏃犳硶鏄剧ず - **淇敼鏂囦欢**: - `MainWindow.axaml` - 淇瀵艰埅鑿滃崟鐨?Button.Content 閲嶅璁剧疆闂 - **瑙e喅鏂规**: - 绉婚櫎绗竴娆$殑 `Content="{Binding Title}"` 璁剧疆 - 鍙繚鐣?`` 鏍囩涓殑 StackPanel 鍐呭 - 纭繚鍥炬爣鍜屾枃鏈兘鑳芥纭樉绀?- **鎶€鏈疄鐜?*: ```xml ``` - **鍔熻兘淇濇寔**: - **瀵艰埅鍔熻兘**: 瀵艰埅鍛戒护鍜屽弬鏁扮粦瀹氬畬鍏ㄦ甯? - **鍥炬爣鏄剧ず**: HeroIcons 鍥炬爣鐜板湪鑳芥纭樉绀? - **鏂囨湰鏄剧ず**: 瀵艰埅椤规爣棰樻甯告樉绀? - **鏍峰紡鏁堟灉**: 鎮仠鏁堟灉鍜岄€変腑鐘舵€佹甯? - **甯冨眬瀵归綈**: StackPanel 鐨勬按骞冲竷灞€鍜岄棿璺濇甯?- **鏋舵瀯浼樺娍**: - **鍐呭缁熶竴**: 鍥炬爣鍜屾枃鏈湪鍚屼竴涓?StackPanel 涓紝甯冨眬涓€鑷? - **缁戝畾姝g‘**: 鍥炬爣绫诲瀷鍜屾爣棰橀兘姝g‘缁戝畾鍒?ViewModel - **浠g爜绠€娲?*: 绉婚櫎浜嗛噸澶嶇殑鍐呭璁剧疆 - **缁存姢鎬уソ**: 鍐呭缁撴瀯鏇存竻鏅帮紝鏄撲簬鐞嗚В鍜岀淮鎶?- **娴嬭瘯缁撴灉**: - 缂栬瘧鎴愬姛锛屾棤閿欒 鉁? - 瀵艰埅鑿滃崟鍥炬爣姝e父鏄剧ず 鉁? - 瀵艰埅鍔熻兘姝e父宸ヤ綔 鉁? - 鎮仠鏁堟灉鍜岄€変腑鐘舵€佹甯?鉁?- **璇存槑**: - 鎴愬姛淇浜嗗鑸彍鍗曚腑鍥炬爣涓嶆樉绀虹殑闂 - 瑙e喅浜?Button.Content 閲嶅璁剧疆瀵艰嚧鐨勫唴瀹硅鐩栭棶棰? - 纭繚浜嗗鑸彍鍗曠殑瀹屾暣鍔熻兘鍜岃瑙夋晥鏋? - 淇濇寔浜嗕笌鍏朵粬 HeroIcons 浣跨敤鐨勪竴鑷存€? ### 瀹炵幇 NavigationItem 浜岀骇瀵艰埅鏀寔 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 涓?NavigationItem 娣诲姞浜岀骇瀵艰埅鏀寔锛屽寘鎷?Children 灞炴€у拰 IsExpanded 鐘舵€佺鐞?- **鍔熻兘闇€姹?*: NavigationItem 鑷冲皯闇€瑕佹敮鎸佷簩绾у鑸紝鍏佽鍒涘缓灞傜骇缁撴瀯鐨勫鑸彍鍗?- **淇敼鏂囦欢**: - `ViewModels/NavigationItem.cs` - 娣诲姞 Children 闆嗗悎鍜?IsExpanded 灞炴€? - `ViewModels/MainWindowViewModel.cs` - 娣诲姞 ToggleExpandCommand 鍜屼簩绾у鑸垵濮嬪寲 - `MainWindow.axaml` - 灏?ListBox 鏀逛负 TreeView 鏀寔灞傜骇鏄剧ず - `Converters/StringConverters.cs` - 娣诲姞 BoolToIconConverter 杞崲鍣?- **鎶€鏈疄鐜?*: - **Children 灞炴€?*: `ObservableCollection Children` 鏀寔瀛愬鑸」 - **IsExpanded 灞炴€?*: `bool IsExpanded` 鎺у埗灞曞紑/鎶樺彔鐘舵€? - **HasChildren 灞炴€?*: `bool HasChildren => Children?.Count > 0` 鍒ゆ柇鏄惁鏈夊瓙椤? - **ToggleExpandCommand**: `ReactiveCommand` 澶勭悊灞曞紑/鎶樺彔鎿嶄綔 - **TreeView 鎺т欢**: 浣跨敤 TreeDataTemplate 鏀寔灞傜骇鏁版嵁缁戝畾 - **浜岀骇瀵艰埅绀轰緥**: - **鐢ㄦ埛绠$悊**: 鍖呭惈鐢ㄦ埛鍒楄〃銆佽鑹茬鐞嗐€佹潈闄愯缃笁涓瓙椤? - **绯荤粺璁剧疆**: 鍖呭惈甯歌璁剧疆銆佸畨鍏ㄨ缃€佸浠芥仮澶嶄笁涓瓙椤? - **鍏朵粬瀵艰埅椤?*: 淇濇寔鍗曠骇缁撴瀯 - **UI 璁捐**: - **灞曞紑/鎶樺彔鎸夐挳**: 浣跨敤 ChevronDown/ChevronRight 鍥炬爣 - **灞傜骇缂╄繘**: TreeView 鑷姩澶勭悊灞傜骇缂╄繘 - **鐘舵€佺鐞?*: 灞曞紑鐘舵€佷笌閫変腑鐘舵€佺嫭绔嬬鐞? - **浜や簰浣撻獙**: 鐐瑰嚮灞曞紑鎸夐挳鍒囨崲鐘舵€侊紝鐐瑰嚮瀵艰埅椤规墽琛屽鑸?- **杞崲鍣ㄦ敮鎸?*: - **BoolToIconConverter**: 灏嗗竷灏斿€艰浆鎹负灞曞紑/鎶樺彔鍥炬爣 - **鍥炬爣鏄犲皠**: true 鈫?ChevronDown, false 鈫?ChevronRight - **鏋舵瀯浼樺娍**: - **鍙墿灞曟€?*: 鏀寔浠绘剰灞傜骇鐨勫鑸粨鏋? - **鐘舵€佺鐞?*: 瀹屾暣鐨勫睍寮€/鎶樺彔鐘舵€佺鐞? - **鍝嶅簲寮?*: 浣跨敤 ReactiveUI 杩涜鐘舵€佺粦瀹? - **绫诲瀷瀹夊叏**: 浣跨敤寮虹被鍨嬪睘鎬э紝缂栬瘧鏃舵鏌?- **鍔熻兘淇濇寔**: - 瀵艰埅鍔熻兘瀹屽叏姝e父 - 鏍囩椤靛垱寤哄拰绠$悊姝e父 - 鍥炬爣鏄剧ず鍜屼氦浜掓甯? - 澶氳瑷€鏀寔淇濇寔 - **娴嬭瘯缁撴灉**: - 缂栬瘧鎴愬姛锛屾棤閿欒 鉁? - 浜岀骇瀵艰埅姝e父鏄剧ず鍜屼氦浜?鉁? - 灞曞紑/鎶樺彔鍔熻兘姝e父 鉁? - 瀵艰埅鍜屾爣绛鹃〉鍔熻兘瀹屾暣 鉁?- **璇存槑**: - 鎴愬姛瀹炵幇浜?NavigationItem 鐨勪簩绾у鑸敮鎸? - 鎻愪緵浜嗗畬鏁寸殑灞傜骇瀵艰埅瑙e喅鏂规 - 寤虹珛浜嗗彲鎵╁睍鐨勫鑸灦鏋? - 涓哄鏉傚簲鐢ㄦ彁渚涗簡鐏垫椿鐨勫鑸鐞嗚兘鍔? ### 淇 TreeView 浜岀骇瀵艰埅鏍峰紡闂 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 淇 TreeView 浜岀骇瀵艰埅涓嚭鐜扮殑鍙岄噸鎶樺彔绗﹀彿鍜屾牱寮忛敊涔遍棶棰?- **闂鎻忚堪**: - TreeView 榛樿鏄剧ず灞曞紑/鎶樺彔鎸夐挳锛屼笌鑷畾涔夋寜閽啿绐佸鑷村嚭鐜颁袱涓姌鍙犵鍙凤紙>>锛? - TreeViewItem 榛樿缂╄繘瀵艰嚧宸﹁竟鍑虹幇澶ч噺绌虹櫧 - 瀵艰埅椤瑰浘鏍囧拰鏂囨湰瀵归綈閿欎贡 - **淇敼鏂囦欢**: - `MainWindow.axaml` - 娣诲姞 TreeView 鏍峰紡瑕嗙洊锛屼慨澶嶅竷灞€闂 - **瑙e喅鏂规**: - **闅愯棌榛樿鎸夐挳**: 浣跨敤鏍峰紡閫夋嫨鍣?`TreeViewItem /template/ ToggleButton` 闅愯棌 TreeView 榛樿鐨勫睍寮€/鎶樺彔鎸夐挳 - **绉婚櫎榛樿缂╄繘**: 璁剧疆 `TreeViewItem` 鐨?`Margin` 鍜?`Padding` 涓?0 - **璋冩暣甯冨眬**: 灏?`Margin="0,2"` 绉诲埌 Grid 涓婏紝纭繚闂磋窛涓€鑷?- **鎶€鏈疄鐜?*: ```xml ``` - **淇鏁堟灉**: - **鍗曚竴鎶樺彔绗﹀彿**: 鍙樉绀鸿嚜瀹氫箟鐨勫睍寮€/鎶樺彔鎸夐挳锛屼笉鍐嶆湁閲嶅绗﹀彿 - **姝g‘瀵归綈**: 瀵艰埅椤瑰浘鏍囧拰鏂囨湰姝g‘瀵归綈锛屾棤澶氫綑绌虹櫧 - **涓€鑷村竷灞€**: 鎵€鏈夊鑸」锛堝崟绾у拰浜岀骇锛夊竷灞€涓€鑷? - **鍔熻兘瀹屾暣**: 灞曞紑/鎶樺彔鍔熻兘姝e父宸ヤ綔 - **娴嬭瘯缁撴灉**: - 缂栬瘧鎴愬姛锛屾棤閿欒 鉁? - 鍙岄噸鎶樺彔绗﹀彿闂宸茶В鍐?鉁? - 鏍峰紡閿欎贡闂宸蹭慨澶?鉁? - 宸﹁竟绌虹櫧闂宸茶В鍐?鉁? - 浜岀骇瀵艰埅鍔熻兘姝e父 鉁?- **璇存槑**: - 鎴愬姛瑙e喅浜?TreeView 榛樿鏍峰紡涓庤嚜瀹氫箟甯冨眬鐨勫啿绐侀棶棰? - 鎻愪緵浜嗘竻鏅般€佷竴鑷寸殑浜岀骇瀵艰埅鐣岄潰 - 淇濇寔浜嗘墍鏈夊鑸姛鑳界殑瀹屾暣鎬? ### 閲嶆瀯浜岀骇瀵艰埅涓?ItemsControl 鏂规 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 灏?TreeView 浜岀骇瀵艰埅閲嶆瀯涓烘洿绠€鍗曞彲闈犵殑 ItemsControl 鏂规 - **闂鍒嗘瀽**: - TreeView 鎺т欢澶嶆潅锛屽鏄撳嚭鐜版牱寮忓啿绐佸拰鍙岄噸鎶樺彔绗﹀彿闂 - Menu 鎺т欢涓嶉€傚悎鍋氫晶杈规爮瀵艰埅锛堥粯璁ゆ按骞冲竷灞€锛? - 闇€瑕佹洿绠€鍗曘€佹洿鍙帶鐨勪簩绾у鑸疄鐜?- **淇敼鏂囦欢**: - `MainWindow.axaml` - 灏?TreeView 鏀逛负 ItemsControl + ScrollViewer 鏂规 - **鎶€鏈柟妗?*: - **涓诲鍣?*: 浣跨敤 `ScrollViewer` + `ItemsControl` 鏇夸唬 TreeView - **涓诲鑸」**: 姣忎釜瀵艰埅椤逛娇鐢?`Button` 鎺т欢锛屽寘鍚浘鏍囥€佹爣棰樺拰灞曞紑鎸夐挳 - **瀛愬鑸」**: 浣跨敤宓屽鐨?`ItemsControl` 鏄剧ず瀛愰」锛岄€氳繃 `IsVisible` 鎺у埗鏄剧ず - **灞曞紑鎺у埗**: 閫氳繃 `IsExpanded` 灞炴€ф帶鍒跺瓙椤圭殑鏄剧ず/闅愯棌 - **甯冨眬璁捐**: ```xml ``` - **鍔熻兘鐗规€?*: - **鍗曚竴灞曞紑鎸夐挳**: 姣忎釜鏈夊瓙椤圭殑瀵艰埅椤瑰彸渚ф樉绀轰竴涓睍寮€/鎶樺彔鎸夐挳 - **灞傜骇缂╄繘**: 瀛愬鑸」閫氳繃 `Margin="20,0,0,0"` 瀹炵幇缂╄繘鏁堟灉 - **瑙嗚鍖哄垎**: 瀛愰」浣跨敤杈冨皬鐨勫瓧浣擄紙13px锛夊拰鐏拌壊鏂囧瓧 - **婊氬姩鏀寔**: ScrollViewer 鏀寔瀵艰埅椤硅繃澶氭椂鐨勬粴鍔? - **鍝嶅簲寮忎氦浜?*: 鎮仠鏁堟灉鍜岄€変腑鐘舵€佸畬鏁翠繚鐣?- **浼樺娍瀵规瘮**: - **vs TreeView**: 鏃犳牱寮忓啿绐侊紝鏃犲弻閲嶆姌鍙犵鍙凤紝甯冨眬鏇村彲鎺? - **vs Menu**: 閫傚悎渚ц竟鏍忓瀭鐩村竷灞€锛屾棤寮瑰嚭鑿滃崟骞叉壈 - **vs ListBox**: 鏀寔宓屽缁撴瀯锛屽睍寮€/鎶樺彔閫昏緫娓呮櫚 - **娴嬭瘯缁撴灉**: - 缂栬瘧鎴愬姛锛屾棤閿欒 鉁? - 浜岀骇瀵艰埅姝e父鏄剧ず 鉁? - 灞曞紑/鎶樺彔鍔熻兘姝e父 鉁? - 鏃犳牱寮忓啿绐侀棶棰?鉁? - 甯冨眬娓呮櫚缇庤 鉁?- **璇存槑**: - 鎴愬姛瑙e喅浜?TreeView 鐨勫鏉傛€ч棶棰? - 鎻愪緵浜嗘洿绠€鍗曘€佹洿鍙帶鐨勪簩绾у鑸疄鐜? - 淇濇寔浜嗘墍鏈夊師鏈夊姛鑳界殑瀹屾暣鎬? ### 浼樺寲浜岀骇瀵艰埅浜や簰閫昏緫 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 浼樺寲浜岀骇瀵艰埅鐨勪氦浜掗€昏緫锛岀Щ闄ゅ睍寮€/鎶樺彔鎸夐挳锛屽疄鐜扮偣鍑昏嚜鍔ㄥ睍寮€骞堕€変腑绗竴涓瓙椤?- **鍔熻兘闇€姹?*: - 绉婚櫎灞曞紑/鎶樺彔鎸夐挳锛岀畝鍖栫晫闈? - 鐐瑰嚮鏈夊瓙椤圭殑瀵艰埅椤规椂鑷姩灞曞紑 - 灞曞紑鏃堕粯璁ら€変腑绗竴涓瓙椤? - ContentPresenter 鏄剧ず閫変腑鐨勫瓙椤瑰唴瀹?- **淇敼鏂囦欢**: - `MainWindow.axaml` - 绉婚櫎灞曞紑/鎶樺彔鎸夐挳锛岀畝鍖栦富瀵艰埅椤瑰竷灞€ - `ViewModels/MainWindowViewModel.cs` - 浼樺寲 NavigateToPage 鏂规硶锛屾坊鍔犺嚜鍔ㄥ睍寮€閫昏緫 - **浜や簰閫昏緫**: - **鏈夊瓙椤圭殑瀵艰埅椤?*: 鐐瑰嚮鏃惰嚜鍔ㄥ睍寮€锛岄€変腑绗竴涓瓙椤癸紝鍒涘缓瀵瑰簲鐨勬爣绛鹃〉 - **鏃犲瓙椤圭殑瀵艰埅椤?*: 鐩存帴閫変腑锛屽垱寤哄搴旂殑鏍囩椤? - **瀛愰」瀵艰埅**: 鐩存帴閫変腑锛屽垱寤哄搴旂殑鏍囩椤?- **鎶€鏈疄鐜?*: ```csharp private void NavigateToPage(NavigationItem navigationItem) { // 鍙栨秷鎵€鏈夊鑸」鐨勯€変腑鐘舵€? foreach (var item in _navigationItems) { item.IsSelected = false; foreach (var child in item.Children) { child.IsSelected = false; } } // 濡傛灉鏄湁瀛愰」鐨勫鑸」锛屽睍寮€骞堕€変腑绗竴涓瓙椤? if (navigationItem.HasChildren) { navigationItem.IsExpanded = true; if (navigationItem.Children.Count > 0) { var firstChild = navigationItem.Children[0]; firstChild.IsSelected = true; SelectedNavigationItem = firstChild; CreateTabForNavigationItem(firstChild); } } else { navigationItem.IsSelected = true; SelectedNavigationItem = navigationItem; CreateTabForNavigationItem(navigationItem); } } ``` - **鐣岄潰浼樺寲**: - **绉婚櫎灞曞紑鎸夐挳**: 涓诲鑸」鍙樉绀哄浘鏍囧拰鏍囬锛屾棤灞曞紑/鎶樺彔鎸夐挳 - **绠€鍖栧竷灞€**: 浣跨敤 StackPanel 鏇夸唬澶嶆潅鐨?Grid 甯冨眬 - **淇濇寔鍔熻兘**: 瀛愰」浠嶇劧閫氳繃 IsVisible 鎺у埗鏄剧ず - **浠g爜閲嶆瀯**: - **绉婚櫎 ToggleExpandCommand**: 涓嶅啀闇€瑕佸睍寮€/鎶樺彔鍛戒护 - **绉婚櫎 ToggleExpand 鏂规硶**: 涓嶅啀闇€瑕佹墜鍔ㄥ垏鎹㈠睍寮€鐘舵€? - **鎻愬彇 CreateTabForNavigationItem 鏂规硶**: 澶嶇敤鏍囩椤靛垱寤洪€昏緫 - **鐢ㄦ埛浣撻獙**: - **涓€閿睍寮€**: 鐐瑰嚮"鐢ㄦ埛绠$悊"鑷姩灞曞紑骞堕€変腑"鐢ㄦ埛鍒楄〃" - **鐩磋鎿嶄綔**: 鏃犻渶棰濆鐨勫睍寮€鎸夐挳锛屾搷浣滄洿鐩磋 - **榛樿閫変腑**: 灞曞紑鍚庤嚜鍔ㄩ€変腑绗竴涓瓙椤癸紝鍑忓皯鐢ㄦ埛鎿嶄綔 - **娴嬭瘯缁撴灉**: - 缂栬瘧鎴愬姛锛屾棤閿欒 鉁? - 鐐瑰嚮"鐢ㄦ埛绠$悊"鑷姩灞曞紑骞堕€変腑绗竴涓瓙椤?鉁? - 鐐瑰嚮"绯荤粺璁剧疆"鑷姩灞曞紑骞堕€変腑绗竴涓瓙椤?鉁? - 瀛愰」瀵艰埅姝e父宸ヤ綔 鉁? - 鏍囩椤靛垱寤哄拰绠$悊姝e父 鉁?- **璇存槑**: - 鎴愬姛浼樺寲浜嗕簩绾у鑸殑浜や簰閫昏緫 - 鎻愪緵浜嗘洿鐩磋銆佹洿渚挎嵎鐨勭敤鎴蜂綋楠? - 绠€鍖栦簡鐣岄潰璁捐锛屽噺灏戜簡涓嶅繀瑕佺殑鎺т欢 ### 淇鏈夊瓙绾у鑸」鐨?Content 璁剧疆闂 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 淇鏈夊瓙绾х殑瀵艰埅椤逛笉搴旇璁剧疆 Content 灞炴€х殑闂 - **闂鍒嗘瀽**: - "鐢ㄦ埛绠$悊"鍜?绯荤粺璁剧疆"杩欎袱涓湁瀛愮骇鐨勫鑸」璁剧疆浜?Content 灞炴€? - 浣嗗疄闄呬笂鐖剁骇鍙槸鐢ㄦ潵灞曞紑/鎶樺彔鐨勫鍣紝涓嶅簲璇ユ湁鍏蜂綋鍐呭 - 瀹為檯鐨勫唴瀹瑰簲璇ョ敱瀛愮骇鎻愪緵 - 褰撶偣鍑荤埗绾ф椂锛屼細鑷姩閫変腑绗竴涓瓙绾э紝鏄剧ず瀛愮骇鐨勫唴瀹?- **淇敼鏂囦欢**: - `ViewModels/MainWindowViewModel.cs` - 绉婚櫎鏈夊瓙绾у鑸」鐨?Content 璁剧疆 - **淇鍐呭**: - **鐢ㄦ埛绠$悊**: 绉婚櫎 `Content = new Views.Pages.UsersPageView { DataContext = new Pages.UsersPageViewModel() }` - **绯荤粺璁剧疆**: 绉婚櫎 `Content = new Views.Pages.SettingsPageView { DataContext = new Pages.SettingsPageViewModel() }` - **璁捐鍘熷垯**: - **鏈夊瓙绾х殑瀵艰埅椤?*: 涓嶈缃?Content锛屽彧浣滀负灞曞紑/鎶樺彔瀹瑰櫒 - **鏃犲瓙绾х殑瀵艰埅椤?*: 璁剧疆 Content锛屾彁渚涘叿浣撻〉闈㈠唴瀹? - **瀛愮骇瀵艰埅椤?*: 璁剧疆 Content锛屾彁渚涘叿浣撻〉闈㈠唴瀹?- **閫昏緫娴佺▼**: 1. 鐐瑰嚮"鐢ㄦ埛绠$悊" 鈫?鑷姩灞曞紑 鈫?閫変腑"鐢ㄦ埛鍒楄〃" 鈫?鏄剧ず鐢ㄦ埛鍒楄〃椤甸潰 2. 鐐瑰嚮"绯荤粺璁剧疆" 鈫?鑷姩灞曞紑 鈫?閫変腑"甯歌璁剧疆" 鈫?鏄剧ず甯歌璁剧疆椤甸潰 3. 鐐瑰嚮"浠〃鏉? 鈫?鐩存帴鏄剧ず浠〃鏉块〉闈紙鏃犲瓙绾э級 - **娴嬭瘯缁撴灉**: - 缂栬瘧鎴愬姛锛屾棤閿欒 鉁? - 鏈夊瓙绾х殑瀵艰埅椤逛笉鍐嶆湁鍐椾綑鐨?Content 鉁? - 鐐瑰嚮鐖剁骇姝g‘灞曞紑骞堕€変腑绗竴涓瓙绾?鉁? - 瀛愮骇鍐呭姝g‘鏄剧ず 鉁?- **璇存槑**: - 淇浜嗗鑸」 Content 璁剧疆鐨勯€昏緫闂 - 鏄庣‘浜嗙埗绾у拰瀛愮骇鐨勮亴璐e垎宸? - 鎻愰珮浜嗕唬鐮佺殑娓呮櫚搴﹀拰鍙淮鎶ゆ€? ### 瀹炵幇瀵艰埅椤逛簰鏂ュ睍寮€鍜岄€変腑鏁堟灉 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 瀹炵幇瀵艰埅椤圭殑浜掓枼灞曞紑閫昏緫鍜屾纭殑閫変腑鏁堟灉 - **闂鍒嗘瀽**: - 鐐瑰嚮鏈夊瓙椤圭殑瀵艰埅椤规椂锛屽簲璇ユ敮鎸佸睍寮€/鏀惰捣鍒囨崲 - 灞曞紑鏃堕粯璁ょ涓€涓瓙椤瑰簲璇ユ湁閫変腑鏁堟灉 - 澶氫釜瀵艰埅椤逛笉搴旇鍚屾椂灞曞紑锛屽簲璇ヤ簰鏂? - 鏀惰捣鏃跺簲璇ユ竻闄ゆ墍鏈夐€変腑鐘舵€?- **淇敼鏂囦欢**: - `ViewModels/MainWindowViewModel.cs` - 浼樺寲 NavigateToPage 鏂规硶锛屽疄鐜颁簰鏂ュ睍寮€閫昏緫 - **浜や簰閫昏緫**: - **鏈夊瓙椤圭殑瀵艰埅椤?*: - 鏈睍寮€鏃讹細灞曞紑骞堕€変腑绗竴涓瓙椤? - 宸插睍寮€鏃讹細鏀惰捣骞舵竻闄ら€変腑鐘舵€? - 浜掓枼锛氬睍寮€涓€涓椂鑷姩鏀惰捣鍏朵粬 - **鏃犲瓙椤圭殑瀵艰埅椤?*锛氱洿鎺ラ€変腑锛屽悓鏃舵敹璧锋墍鏈夊叾浠栧睍寮€椤?- **鎶€鏈疄鐜?*: ```csharp private void NavigateToPage(NavigationItem navigationItem) { if (navigationItem.HasChildren) { if (navigationItem.IsExpanded) { // 鏀惰捣閫昏緫 navigationItem.IsExpanded = false; // 娓呴櫎鎵€鏈夐€変腑鐘舵€? SelectedNavigationItem = null; } else { // 灞曞紑閫昏緫 // 鍏堟敹璧峰叾浠栨墍鏈夊睍寮€鐨勫鑸」 foreach (var item in _navigationItems) { if (item != navigationItem) { item.IsExpanded = false; // 娓呴櫎閫変腑鐘舵€? } } // 灞曞紑褰撳墠椤瑰苟閫変腑绗竴涓瓙椤? navigationItem.IsExpanded = true; var firstChild = navigationItem.Children[0]; firstChild.IsSelected = true; SelectedNavigationItem = firstChild; } } } ``` - **鍔熻兘鐗规€?*: - **浜掓枼灞曞紑**: 鍚屾椂鍙兘鏈変竴涓鑸」灞曞紑 - **鍒囨崲灞曞紑**: 鐐瑰嚮宸插睍寮€鐨勯」浼氭敹璧? - **鑷姩閫変腑**: 灞曞紑鏃惰嚜鍔ㄩ€変腑绗竴涓瓙椤? - **鐘舵€佺鐞?*: 鏀惰捣鏃舵竻闄ゆ墍鏈夐€変腑鐘舵€? - **鏍囩椤电鐞?*: 閫変腑瀛愰」鏃惰嚜鍔ㄥ垱寤哄搴旀爣绛鹃〉 - **鐢ㄦ埛浣撻獙**: - **鐩磋鎿嶄綔**: 鐐瑰嚮"鐢ㄦ埛绠$悊"灞曞紑锛屽啀鐐瑰嚮鏀惰捣 - **浜掓枼琛屼负**: 灞曞紑"鐢ㄦ埛绠$悊"鏃讹紝"绯荤粺璁剧疆"鑷姩鏀惰捣 - **閫変腑鍙嶉**: 灞曞紑鍚庣涓€涓瓙椤规湁鏄庢樉鐨勯€変腑鏁堟灉 - **鐘舵€佷竴鑷?*: 鏀惰捣鏃舵墍鏈夌姸鎬侀兘姝g‘娓呴櫎 - **娴嬭瘯缁撴灉**: - 缂栬瘧鎴愬姛锛屾棤閿欒 鉁? - 浜掓枼灞曞紑鍔熻兘姝e父 鉁? - 灞曞紑/鏀惰捣鍒囨崲姝e父 鉁? - 绗竴涓瓙椤归€変腑鏁堟灉姝e父 鉁? - 鐘舵€佺鐞嗘纭?鉁?- **璇存槑**: - 鎴愬姛瀹炵幇浜嗗鑸」鐨勪簰鏂ュ睍寮€閫昏緫 - 鎻愪緵浜嗘洿鐩磋銆佹洿绗﹀悎鐢ㄦ埛涔犳儻鐨勪氦浜掍綋楠? - 瀹屽杽浜嗙姸鎬佺鐞嗗拰閫変腑鏁堟灉 ### 淇绐楀彛鎺у埗鎸夐挳 HeroIcons 鏍峰紡閫夋嫨鍣ㄩ棶棰?- **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 淇 HeroIcons 鍦?Style 閫夋嫨鍣ㄤ腑鐨勫懡鍚嶇┖闂磋В鏋愰棶棰?- **淇敼鍘熷洜**: 缂栬瘧鏃跺嚭鐜?"Unable to resolve type heroicons from namespace" 閿欒 - **淇敼鏂囦欢**: - `MainWindow.axaml` - 绠€鍖栧叧闂寜閽殑鏍峰紡澶勭悊 - **闂鎻忚堪**: - **閿欒淇℃伅**: `Unable to resolve type heroicons from namespace https://github.com/avaloniaui` - **閿欒浣嶇疆**: 绗?46琛屽拰绗?49琛岀殑 Style 閫夋嫨鍣? - **鏍规湰鍘熷洜**: Avalonia 鐨?Style 閫夋嫨鍣ㄤ笉鏀寔甯﹀懡鍚嶇┖闂村墠缂€鐨勭被鍨嬮€夋嫨鍣?- **瑙e喅鏂规**: - **绉婚櫎澶嶆潅鏍峰紡**: 鍒犻櫎 `heroicons:HeroIcon.Styles` 鍜岀浉鍏崇殑澶嶆潅鏍峰紡閫夋嫨鍣? - **绠€鍖栧疄鐜?*: 鍙繚鐣?Button 鐨勬偓鍋滆儗鏅壊鍙樺寲 - **淇濇寔鍔熻兘**: 鍏抽棴鎸夐挳鐨勭孩鑹叉偓鍋滆儗鏅晥鏋滀粛鐒舵甯?- **鎶€鏈粏鑺?*: ```xml ``` - **鍔熻兘淇濇寔**: - **鏈€灏忓寲鎸夐挳**: 姝e父鏄剧ず鍜屼氦浜?鉁? - **鏈€澶у寲鎸夐挳**: 姝e父鏄剧ず鍜屼氦浜?鉁? - **鍏抽棴鎸夐挳**: 姝e父鏄剧ず鍜屼氦浜?鉁? - **鎮仠鏁堟灉**: 鑳屾櫙鑹插彉鍖栨甯?鉁? - **宸ュ叿鎻愮ず**: 鍔熻兘瀹屾暣 鉁?- **鏋舵瀯浼樺娍**: - **缂栬瘧鎴愬姛**: 瑙e喅浜嗗懡鍚嶇┖闂磋В鏋愰棶棰? - **浠g爜绠€娲?*: 绉婚櫎浜嗗鏉傜殑鏍峰紡閫夋嫨鍣? - **鍔熻兘瀹屾暣**: 鎵€鏈夋寜閽姛鑳芥甯? - **缁存姢鎬уソ**: 浠g爜缁撴瀯鏇寸畝鍗曟竻鏅?- **娴嬭瘯缁撴灉**: - 缂栬瘧鎴愬姛锛屾棤閿欒 鉁? - 绐楀彛鎺у埗鎸夐挳姝e父鏄剧ず鍜屼氦浜?鉁? - 鎮仠鏁堟灉姝e父 鉁?- **璇存槑**: - 鎴愬姛淇浜?HeroIcons 鏍峰紡閫夋嫨鍣ㄧ殑鍛藉悕绌洪棿闂 - 淇濇寔浜嗘墍鏈夌獥鍙f帶鍒舵寜閽殑鍔熻兘瀹屾暣鎬? - 鎻愪緵浜嗘洿绠€娲併€佹洿绋冲畾鐨勪唬鐮佸疄鐜? ### 閲嶆瀯鏍囩椤靛叧闂寜閽娇鐢?HeroIcons - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 灏嗘爣绛鹃〉鍏抽棴鎸夐挳浠?Path 缁樺埗鏀逛负浣跨敤 HeroIcons - **淇敼鍘熷洜**: 鐢ㄦ埛寤鸿浣跨敤 HeroIcons 鏇夸唬 Path 缁樺埗锛屾彁渚涙洿缁熶竴鐨勫浘鏍囩郴缁?- **淇敼鏂囦欢**: - `MainWindow.axaml` - 鏇存柊鏍囩椤靛叧闂寜閽娇鐢?HeroIcon 鎺т欢 - **鍥炬爣鏄犲皠**: - **鏍囩椤靛叧闂寜閽?*: `IconType.XMark` (鍘?Path X 褰? - **鎶€鏈疄鐜?*: ```xml ``` - **鏍峰紡淇濇寔**: - **灏哄涓€鑷?*: 淇濇寔 6x6 鍍忕礌鐨勫浘鏍囧昂瀵? - **棰滆壊缁戝畾**: 浣跨敤 `$parent[Button].Foreground` 缁戝畾淇濇寔鍔ㄦ€侀鑹? - **瀵归綈鏂瑰紡**: 淇濇寔灞呬腑瀵归綈 - **鎮仠鏁堟灉**: 淇濇寔鍘熸湁鐨勬偓鍋滆儗鏅壊鍜屽墠鏅壊鍙樺寲 - **鍔熻兘淇濇寔**: - **鍏抽棴鍔熻兘**: 鏍囩椤靛叧闂姛鑳藉畬鍏ㄦ甯? - **鍙鎬?*: `IsVisible="{Binding CanClose}"` 鏉′欢鏄剧ず姝e父 - **宸ュ叿鎻愮ず**: `tooltip:ToolTip.Tip` 鍔熻兘姝e父 - **鍛戒护缁戝畾**: `CloseTabCommand` 鍜?`CommandParameter` 姝e父 - **鎮仠鏁堟灉**: 鑳屾櫙鑹插拰鍓嶆櫙鑹插彉鍖栨甯?- **鏋舵瀯浼樺娍**: - **缁熶竴鍥炬爣绯荤粺**: 涓庣獥鍙f帶鍒舵寜閽娇鐢ㄧ浉鍚岀殑 XMark 鍥炬爣 - **绠€鍖栦唬鐮?*: 绉婚櫎澶嶆潅鐨?Path 缁樺埗浠g爜 - **鏄撲簬缁存姢**: 鍥炬爣绠$悊鏇撮泦涓紝鏄撲簬鏇存崲鍜屾洿鏂? - **绫诲瀷瀹夊叏**: 浣跨敤鏋氫妇绫诲瀷锛岀紪璇戞椂妫€鏌ュ浘鏍囨湁鏁堟€? - **鐜颁唬鍖?*: HeroIcons 鎻愪緵鏇寸幇浠c€佹洿涓撲笟鐨勫浘鏍囪璁?- **瑙嗚鏁堟灉**: - 鍥炬爣鏇村姞缁熶竴鍜屼笓涓? - 鏀寔楂楧PI鏄剧ず - 涓庢暣浣?UI 璁捐椋庢牸涓€鑷? - 鎻愪緵鏇村ソ鐨勭敤鎴蜂綋楠?- **娴嬭瘯缁撴灉**: - 缂栬瘧鎴愬姛锛屾棤閿欒 鉁? - 鏍囩椤靛叧闂寜閽甯告樉绀哄拰浜や簰 鉁? - 鎮仠鏁堟灉鍜岄鑹插彉鍖栨甯?鉁? - 鍏抽棴鍔熻兘姝e父宸ヤ綔 鉁?- **璇存槑**: - 鎴愬姛灏嗘爣绛鹃〉鍏抽棴鎸夐挳閲嶆瀯涓轰娇鐢?HeroIcons - 鎻愪緵浜嗘洿缁熶竴銆佹洿涓撲笟鐨勫浘鏍囦綋楠? - 绠€鍖栦簡浠g爜缁撴瀯锛屾彁楂樹簡鍙淮鎶ゆ€? - 瀹屽叏绗﹀悎鐜颁唬 UI 璁捐鏍囧噯 ### 淇瀵艰埅鑿滃崟涓浘鏍囦笉鏄剧ず闂 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 淇瀵艰埅鑿滃崟涓?HeroIcons 鍥炬爣涓嶆樉绀虹殑闂 - **闂鎻忚堪**: - 瀵艰埅鑿滃崟涓殑鍥炬爣鏃犳硶鏄剧ず锛屽叾浠栧湴鏂圭殑 HeroIcons 閮借兘姝e父鏄剧ず - 闂鍑虹幇鍦ㄥ鑸彍鍗曠殑 Button.Content 缁戝畾涓?- **鏍规湰鍘熷洜**: - Button.Content 琚缃簡涓ゆ锛氱涓€娆″湪绗?3琛?`Content="{Binding Title}"`锛岀浜屾鍦ㄧ89-96琛岄€氳繃 `` 鏍囩閲嶆柊瀹氫箟 - 杩欏鑷翠簡鍐呭琚鐩栵紝鍥炬爣鏃犳硶鏄剧ず - **淇敼鏂囦欢**: - `MainWindow.axaml` - 淇瀵艰埅鑿滃崟鐨?Button.Content 閲嶅璁剧疆闂 - **瑙e喅鏂规**: - 绉婚櫎绗竴娆$殑 `Content="{Binding Title}"` 璁剧疆 - 鍙繚鐣?`` 鏍囩涓殑 StackPanel 鍐呭 - 纭繚鍥炬爣鍜屾枃鏈兘鑳芥纭樉绀?- **鎶€鏈疄鐜?*: ```xml ``` - **鍔熻兘淇濇寔**: - **瀵艰埅鍔熻兘**: 瀵艰埅鍛戒护鍜屽弬鏁扮粦瀹氬畬鍏ㄦ甯? - **鍥炬爣鏄剧ず**: HeroIcons 鍥炬爣鐜板湪鑳芥纭樉绀? - **鏂囨湰鏄剧ず**: 瀵艰埅椤规爣棰樻甯告樉绀? - **鏍峰紡鏁堟灉**: 鎮仠鏁堟灉鍜岄€変腑鐘舵€佹甯? - **甯冨眬瀵归綈**: StackPanel 鐨勬按骞冲竷灞€鍜岄棿璺濇甯?- **鏋舵瀯浼樺娍**: - **鍐呭缁熶竴**: 鍥炬爣鍜屾枃鏈湪鍚屼竴涓?StackPanel 涓紝甯冨眬涓€鑷? - **缁戝畾姝g‘**: 鍥炬爣绫诲瀷鍜屾爣棰橀兘姝g‘缁戝畾鍒?ViewModel - **浠g爜绠€娲?*: 绉婚櫎浜嗛噸澶嶇殑鍐呭璁剧疆 - **缁存姢鎬уソ**: 鍐呭缁撴瀯鏇存竻鏅帮紝鏄撲簬鐞嗚В鍜岀淮鎶?- **娴嬭瘯缁撴灉**: - 缂栬瘧鎴愬姛锛屾棤閿欒 鉁? - 瀵艰埅鑿滃崟鍥炬爣姝e父鏄剧ず 鉁? - 瀵艰埅鍔熻兘姝e父宸ヤ綔 鉁? - 鎮仠鏁堟灉鍜岄€変腑鐘舵€佹甯?鉁?- **璇存槑**: - 鎴愬姛淇浜嗗鑸彍鍗曚腑鍥炬爣涓嶆樉绀虹殑闂 - 瑙e喅浜?Button.Content 閲嶅璁剧疆瀵艰嚧鐨勫唴瀹硅鐩栭棶棰? - 纭繚浜嗗鑸彍鍗曠殑瀹屾暣鍔熻兘鍜岃瑙夋晥鏋? - 淇濇寔浜嗕笌鍏朵粬 HeroIcons 浣跨敤鐨勪竴鑷存€? ### 瀹炵幇 NavigationItem 浜岀骇瀵艰埅鏀寔 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 涓?NavigationItem 娣诲姞浜岀骇瀵艰埅鏀寔锛屽寘鎷?Children 灞炴€у拰 IsExpanded 鐘舵€佺鐞?- **鍔熻兘闇€姹?*: NavigationItem 鑷冲皯闇€瑕佹敮鎸佷簩绾у鑸紝鍏佽鍒涘缓灞傜骇缁撴瀯鐨勫鑸彍鍗?- **淇敼鏂囦欢**: - `ViewModels/NavigationItem.cs` - 娣诲姞 Children 闆嗗悎鍜?IsExpanded 灞炴€? - `ViewModels/MainWindowViewModel.cs` - 娣诲姞 ToggleExpandCommand 鍜屼簩绾у鑸垵濮嬪寲 - `MainWindow.axaml` - 灏?ListBox 鏀逛负 TreeView 鏀寔灞傜骇鏄剧ず - `Converters/StringConverters.cs` - 娣诲姞 BoolToIconConverter 杞崲鍣?- **鎶€鏈疄鐜?*: - **Children 灞炴€?*: `ObservableCollection Children` 鏀寔瀛愬鑸」 - **IsExpanded 灞炴€?*: `bool IsExpanded` 鎺у埗灞曞紑/鎶樺彔鐘舵€? - **HasChildren 灞炴€?*: `bool HasChildren => Children?.Count > 0` 鍒ゆ柇鏄惁鏈夊瓙椤? - **ToggleExpandCommand**: `ReactiveCommand` 澶勭悊灞曞紑/鎶樺彔鎿嶄綔 - **TreeView 鎺т欢**: 浣跨敤 TreeDataTemplate 鏀寔灞傜骇鏁版嵁缁戝畾 - **浜岀骇瀵艰埅绀轰緥**: - **鐢ㄦ埛绠$悊**: 鍖呭惈鐢ㄦ埛鍒楄〃銆佽鑹茬鐞嗐€佹潈闄愯缃笁涓瓙椤? - **绯荤粺璁剧疆**: 鍖呭惈甯歌璁剧疆銆佸畨鍏ㄨ缃€佸浠芥仮澶嶄笁涓瓙椤? - **鍏朵粬瀵艰埅椤?*: 淇濇寔鍗曠骇缁撴瀯 - **UI 璁捐**: - **灞曞紑/鎶樺彔鎸夐挳**: 浣跨敤 ChevronDown/ChevronRight 鍥炬爣 - **灞傜骇缂╄繘**: TreeView 鑷姩澶勭悊灞傜骇缂╄繘 - **鐘舵€佺鐞?*: 灞曞紑鐘舵€佷笌閫変腑鐘舵€佺嫭绔嬬鐞? - **浜や簰浣撻獙**: 鐐瑰嚮灞曞紑鎸夐挳鍒囨崲鐘舵€侊紝鐐瑰嚮瀵艰埅椤规墽琛屽鑸?- **杞崲鍣ㄦ敮鎸?*: - **BoolToIconConverter**: 灏嗗竷灏斿€艰浆鎹负灞曞紑/鎶樺彔鍥炬爣 - **鍥炬爣鏄犲皠**: true 鈫?ChevronDown, false 鈫?ChevronRight - **鏋舵瀯浼樺娍**: - **鍙墿灞曟€?*: 鏀寔浠绘剰灞傜骇鐨勫鑸粨鏋? - **鐘舵€佺鐞?*: 瀹屾暣鐨勫睍寮€/鎶樺彔鐘舵€佺鐞? - **鍝嶅簲寮?*: 浣跨敤 ReactiveUI 杩涜鐘舵€佺粦瀹? - **绫诲瀷瀹夊叏**: 浣跨敤寮虹被鍨嬪睘鎬э紝缂栬瘧鏃舵鏌?- **鍔熻兘淇濇寔**: - 瀵艰埅鍔熻兘瀹屽叏姝e父 - 鏍囩椤靛垱寤哄拰绠$悊姝e父 - 鍥炬爣鏄剧ず鍜屼氦浜掓甯? - 澶氳瑷€鏀寔淇濇寔 - **娴嬭瘯缁撴灉**: - 缂栬瘧鎴愬姛锛屾棤閿欒 鉁? - 浜岀骇瀵艰埅姝e父鏄剧ず鍜屼氦浜?鉁? - 灞曞紑/鎶樺彔鍔熻兘姝e父 鉁? - 瀵艰埅鍜屾爣绛鹃〉鍔熻兘瀹屾暣 鉁?- **璇存槑**: - 鎴愬姛瀹炵幇浜?NavigationItem 鐨勪簩绾у鑸敮鎸? - 鎻愪緵浜嗗畬鏁寸殑灞傜骇瀵艰埅瑙e喅鏂规 - 寤虹珛浜嗗彲鎵╁睍鐨勫鑸灦鏋? - 涓哄鏉傚簲鐢ㄦ彁渚涗簡鐏垫椿鐨勫鑸鐞嗚兘鍔? ### 淇 TreeView 浜岀骇瀵艰埅鏍峰紡闂 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 淇 TreeView 浜岀骇瀵艰埅涓嚭鐜扮殑鍙岄噸鎶樺彔绗﹀彿鍜屾牱寮忛敊涔遍棶棰?- **闂鎻忚堪**: - TreeView 榛樿鏄剧ず灞曞紑/鎶樺彔鎸夐挳锛屼笌鑷畾涔夋寜閽啿绐佸鑷村嚭鐜颁袱涓姌鍙犵鍙凤紙>>锛? - TreeViewItem 榛樿缂╄繘瀵艰嚧宸﹁竟鍑虹幇澶ч噺绌虹櫧 - 瀵艰埅椤瑰浘鏍囧拰鏂囨湰瀵归綈閿欎贡 - **淇敼鏂囦欢**: - `MainWindow.axaml` - 娣诲姞 TreeView 鏍峰紡瑕嗙洊锛屼慨澶嶅竷灞€闂 - **瑙e喅鏂规**: - **闅愯棌榛樿鎸夐挳**: 浣跨敤鏍峰紡閫夋嫨鍣?`TreeViewItem /template/ ToggleButton` 闅愯棌 TreeView 榛樿鐨勫睍寮€/鎶樺彔鎸夐挳 - **绉婚櫎榛樿缂╄繘**: 璁剧疆 `TreeViewItem` 鐨?`Margin` 鍜?`Padding` 涓?0 - **璋冩暣甯冨眬**: 灏?`Margin="0,2"` 绉诲埌 Grid 涓婏紝纭繚闂磋窛涓€鑷?- **鎶€鏈疄鐜?*: ```xml ``` - **淇鏁堟灉**: - **鍗曚竴鎶樺彔绗﹀彿**: 鍙樉绀鸿嚜瀹氫箟鐨勫睍寮€/鎶樺彔鎸夐挳锛屼笉鍐嶆湁閲嶅绗﹀彿 - **姝g‘瀵归綈**: 瀵艰埅椤瑰浘鏍囧拰鏂囨湰姝g‘瀵归綈锛屾棤澶氫綑绌虹櫧 - **涓€鑷村竷灞€**: 鎵€鏈夊鑸」锛堝崟绾у拰浜岀骇锛夊竷灞€涓€鑷? - **鍔熻兘瀹屾暣**: 灞曞紑/鎶樺彔鍔熻兘姝e父宸ヤ綔 - **娴嬭瘯缁撴灉**: - 缂栬瘧鎴愬姛锛屾棤閿欒 鉁? - 鍙岄噸鎶樺彔绗﹀彿闂宸茶В鍐?鉁? - 鏍峰紡閿欎贡闂宸蹭慨澶?鉁? - 宸﹁竟绌虹櫧闂宸茶В鍐?鉁? - 浜岀骇瀵艰埅鍔熻兘姝e父 鉁?- **璇存槑**: - 鎴愬姛瑙e喅浜?TreeView 榛樿鏍峰紡涓庤嚜瀹氫箟甯冨眬鐨勫啿绐侀棶棰? - 鎻愪緵浜嗘竻鏅般€佷竴鑷寸殑浜岀骇瀵艰埅鐣岄潰 - 淇濇寔浜嗘墍鏈夊鑸姛鑳界殑瀹屾暣鎬? ### 閲嶆瀯浜岀骇瀵艰埅涓?ItemsControl 鏂规 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 灏?TreeView 浜岀骇瀵艰埅閲嶆瀯涓烘洿绠€鍗曞彲闈犵殑 ItemsControl 鏂规 - **闂鍒嗘瀽**: - TreeView 鎺т欢澶嶆潅锛屽鏄撳嚭鐜版牱寮忓啿绐佸拰鍙岄噸鎶樺彔绗﹀彿闂 - Menu 鎺т欢涓嶉€傚悎鍋氫晶杈规爮瀵艰埅锛堥粯璁ゆ按骞冲竷灞€锛? - 闇€瑕佹洿绠€鍗曘€佹洿鍙帶鐨勪簩绾у鑸疄鐜?- **淇敼鏂囦欢**: - `MainWindow.axaml` - 灏?TreeView 鏀逛负 ItemsControl + ScrollViewer 鏂规 - **鎶€鏈柟妗?*: - **涓诲鍣?*: 浣跨敤 `ScrollViewer` + `ItemsControl` 鏇夸唬 TreeView - **涓诲鑸」**: 姣忎釜瀵艰埅椤逛娇鐢?`Button` 鎺т欢锛屽寘鍚浘鏍囥€佹爣棰樺拰灞曞紑鎸夐挳 - **瀛愬鑸」**: 浣跨敤宓屽鐨?`ItemsControl` 鏄剧ず瀛愰」锛岄€氳繃 `IsVisible` 鎺у埗鏄剧ず - **灞曞紑鎺у埗**: 閫氳繃 `IsExpanded` 灞炴€ф帶鍒跺瓙椤圭殑鏄剧ず/闅愯棌 - **甯冨眬璁捐**: ```xml ``` - **鍔熻兘鐗规€?*: - **鍗曚竴灞曞紑鎸夐挳**: 姣忎釜鏈夊瓙椤圭殑瀵艰埅椤瑰彸渚ф樉绀轰竴涓睍寮€/鎶樺彔鎸夐挳 - **灞傜骇缂╄繘**: 瀛愬鑸」閫氳繃 `Margin="20,0,0,0"` 瀹炵幇缂╄繘鏁堟灉 - **瑙嗚鍖哄垎**: 瀛愰」浣跨敤杈冨皬鐨勫瓧浣擄紙13px锛夊拰鐏拌壊鏂囧瓧 - **婊氬姩鏀寔**: ScrollViewer 鏀寔瀵艰埅椤硅繃澶氭椂鐨勬粴鍔? - **鍝嶅簲寮忎氦浜?*: 鎮仠鏁堟灉鍜岄€変腑鐘舵€佸畬鏁翠繚鐣?- **浼樺娍瀵规瘮**: - **vs TreeView**: 鏃犳牱寮忓啿绐侊紝鏃犲弻閲嶆姌鍙犵鍙凤紝甯冨眬鏇村彲鎺? - **vs Menu**: 閫傚悎渚ц竟鏍忓瀭鐩村竷灞€锛屾棤寮瑰嚭鑿滃崟骞叉壈 - **vs ListBox**: 鏀寔宓屽缁撴瀯锛屽睍寮€/鎶樺彔閫昏緫娓呮櫚 - **娴嬭瘯缁撴灉**: - 缂栬瘧鎴愬姛锛屾棤閿欒 鉁? - 浜岀骇瀵艰埅姝e父鏄剧ず 鉁? - 灞曞紑/鎶樺彔鍔熻兘姝e父 鉁? - 鏃犳牱寮忓啿绐侀棶棰?鉁? - 甯冨眬娓呮櫚缇庤 鉁?- **璇存槑**: - 鎴愬姛瑙e喅浜?TreeView 鐨勫鏉傛€ч棶棰? - 鎻愪緵浜嗘洿绠€鍗曘€佹洿鍙帶鐨勪簩绾у鑸疄鐜? - 淇濇寔浜嗘墍鏈夊師鏈夊姛鑳界殑瀹屾暣鎬? ### 浼樺寲浜岀骇瀵艰埅浜や簰閫昏緫 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 浼樺寲浜岀骇瀵艰埅鐨勪氦浜掗€昏緫锛岀Щ闄ゅ睍寮€/鎶樺彔鎸夐挳锛屽疄鐜扮偣鍑昏嚜鍔ㄥ睍寮€骞堕€変腑绗竴涓瓙椤?- **鍔熻兘闇€姹?*: - 绉婚櫎灞曞紑/鎶樺彔鎸夐挳锛岀畝鍖栫晫闈? - 鐐瑰嚮鏈夊瓙椤圭殑瀵艰埅椤规椂鑷姩灞曞紑 - 灞曞紑鏃堕粯璁ら€変腑绗竴涓瓙椤? - ContentPresenter 鏄剧ず閫変腑鐨勫瓙椤瑰唴瀹?- **淇敼鏂囦欢**: - `MainWindow.axaml` - 绉婚櫎灞曞紑/鎶樺彔鎸夐挳锛岀畝鍖栦富瀵艰埅椤瑰竷灞€ - `ViewModels/MainWindowViewModel.cs` - 浼樺寲 NavigateToPage 鏂规硶锛屾坊鍔犺嚜鍔ㄥ睍寮€閫昏緫 - **浜や簰閫昏緫**: - **鏈夊瓙椤圭殑瀵艰埅椤?*: 鐐瑰嚮鏃惰嚜鍔ㄥ睍寮€锛岄€変腑绗竴涓瓙椤癸紝鍒涘缓瀵瑰簲鐨勬爣绛鹃〉 - **鏃犲瓙椤圭殑瀵艰埅椤?*: 鐩存帴閫変腑锛屽垱寤哄搴旂殑鏍囩椤? - **瀛愰」瀵艰埅**: 鐩存帴閫変腑锛屽垱寤哄搴旂殑鏍囩椤?- **鎶€鏈疄鐜?*: ```csharp private void NavigateToPage(NavigationItem navigationItem) { // 鍙栨秷鎵€鏈夊鑸」鐨勯€変腑鐘舵€? foreach (var item in _navigationItems) { item.IsSelected = false; foreach (var child in item.Children) { child.IsSelected = false; } } // 濡傛灉鏄湁瀛愰」鐨勫鑸」锛屽睍寮€骞堕€変腑绗竴涓瓙椤? if (navigationItem.HasChildren) { navigationItem.IsExpanded = true; if (navigationItem.Children.Count > 0) { var firstChild = navigationItem.Children[0]; firstChild.IsSelected = true; SelectedNavigationItem = firstChild; CreateTabForNavigationItem(firstChild); } } else { navigationItem.IsSelected = true; SelectedNavigationItem = navigationItem; CreateTabForNavigationItem(navigationItem); } } ``` - **鐣岄潰浼樺寲**: - **绉婚櫎灞曞紑鎸夐挳**: 涓诲鑸」鍙樉绀哄浘鏍囧拰鏍囬锛屾棤灞曞紑/鎶樺彔鎸夐挳 - **绠€鍖栧竷灞€**: 浣跨敤 StackPanel 鏇夸唬澶嶆潅鐨?Grid 甯冨眬 - **淇濇寔鍔熻兘**: 瀛愰」浠嶇劧閫氳繃 IsVisible 鎺у埗鏄剧ず - **浠g爜閲嶆瀯**: - **绉婚櫎 ToggleExpandCommand**: 涓嶅啀闇€瑕佸睍寮€/鎶樺彔鍛戒护 - **绉婚櫎 ToggleExpand 鏂规硶**: 涓嶅啀闇€瑕佹墜鍔ㄥ垏鎹㈠睍寮€鐘舵€? - **鎻愬彇 CreateTabForNavigationItem 鏂规硶**: 澶嶇敤鏍囩椤靛垱寤洪€昏緫 - **鐢ㄦ埛浣撻獙**: - **涓€閿睍寮€**: 鐐瑰嚮"鐢ㄦ埛绠$悊"鑷姩灞曞紑骞堕€変腑"鐢ㄦ埛鍒楄〃" - **鐩磋鎿嶄綔**: 鏃犻渶棰濆鐨勫睍寮€鎸夐挳锛屾搷浣滄洿鐩磋 - **榛樿閫変腑**: 灞曞紑鍚庤嚜鍔ㄩ€変腑绗竴涓瓙椤癸紝鍑忓皯鐢ㄦ埛鎿嶄綔 - **娴嬭瘯缁撴灉**: - 缂栬瘧鎴愬姛锛屾棤閿欒 鉁? - 鐐瑰嚮"鐢ㄦ埛绠$悊"鑷姩灞曞紑骞堕€変腑绗竴涓瓙椤?鉁? - 鐐瑰嚮"绯荤粺璁剧疆"鑷姩灞曞紑骞堕€変腑绗竴涓瓙椤?鉁? - 瀛愰」瀵艰埅姝e父宸ヤ綔 鉁? - 鏍囩椤靛垱寤哄拰绠$悊姝e父 鉁?- **璇存槑**: - 鎴愬姛浼樺寲浜嗕簩绾у鑸殑浜や簰閫昏緫 - 鎻愪緵浜嗘洿鐩磋銆佹洿渚挎嵎鐨勭敤鎴蜂綋楠? - 绠€鍖栦簡鐣岄潰璁捐锛屽噺灏戜簡涓嶅繀瑕佺殑鎺т欢 ### 淇鏈夊瓙绾у鑸」鐨?Content 璁剧疆闂 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 淇鏈夊瓙绾х殑瀵艰埅椤逛笉搴旇璁剧疆 Content 灞炴€х殑闂 - **闂鍒嗘瀽**: - "鐢ㄦ埛绠$悊"鍜?绯荤粺璁剧疆"杩欎袱涓湁瀛愮骇鐨勫鑸」璁剧疆浜?Content 灞炴€? - 浣嗗疄闄呬笂鐖剁骇鍙槸鐢ㄦ潵灞曞紑/鎶樺彔鐨勫鍣紝涓嶅簲璇ユ湁鍏蜂綋鍐呭 - 瀹為檯鐨勫唴瀹瑰簲璇ョ敱瀛愮骇鎻愪緵 - 褰撶偣鍑荤埗绾ф椂锛屼細鑷姩閫変腑绗竴涓瓙绾э紝鏄剧ず瀛愮骇鐨勫唴瀹?- **淇敼鏂囦欢**: - `ViewModels/MainWindowViewModel.cs` - 绉婚櫎鏈夊瓙绾у鑸」鐨?Content 璁剧疆 - **淇鍐呭**: - **鐢ㄦ埛绠$悊**: 绉婚櫎 `Content = new Views.Pages.UsersPageView { DataContext = new Pages.UsersPageViewModel() }` - **绯荤粺璁剧疆**: 绉婚櫎 `Content = new Views.Pages.SettingsPageView { DataContext = new Pages.SettingsPageViewModel() }` - **璁捐鍘熷垯**: - **鏈夊瓙绾х殑瀵艰埅椤?*: 涓嶈缃?Content锛屽彧浣滀负灞曞紑/鎶樺彔瀹瑰櫒 - **鏃犲瓙绾х殑瀵艰埅椤?*: 璁剧疆 Content锛屾彁渚涘叿浣撻〉闈㈠唴瀹? - **瀛愮骇瀵艰埅椤?*: 璁剧疆 Content锛屾彁渚涘叿浣撻〉闈㈠唴瀹?- **閫昏緫娴佺▼**: 1. 鐐瑰嚮"鐢ㄦ埛绠$悊" 鈫?鑷姩灞曞紑 鈫?閫変腑"鐢ㄦ埛鍒楄〃" 鈫?鏄剧ず鐢ㄦ埛鍒楄〃椤甸潰 2. 鐐瑰嚮"绯荤粺璁剧疆" 鈫?鑷姩灞曞紑 鈫?閫変腑"甯歌璁剧疆" 鈫?鏄剧ず甯歌璁剧疆椤甸潰 3. 鐐瑰嚮"浠〃鏉? 鈫?鐩存帴鏄剧ず浠〃鏉块〉闈紙鏃犲瓙绾э級 - **娴嬭瘯缁撴灉**: - 缂栬瘧鎴愬姛锛屾棤閿欒 鉁? - 鏈夊瓙绾х殑瀵艰埅椤逛笉鍐嶆湁鍐椾綑鐨?Content 鉁? - 鐐瑰嚮鐖剁骇姝g‘灞曞紑骞堕€変腑绗竴涓瓙绾?鉁? - 瀛愮骇鍐呭姝g‘鏄剧ず 鉁?- **璇存槑**: - 淇浜嗗鑸」 Content 璁剧疆鐨勯€昏緫闂 - 鏄庣‘浜嗙埗绾у拰瀛愮骇鐨勮亴璐e垎宸? - 鎻愰珮浜嗕唬鐮佺殑娓呮櫚搴﹀拰鍙淮鎶ゆ€? ### 瀹炵幇瀵艰埅椤逛簰鏂ュ睍寮€鍜岄€変腑鏁堟灉 - **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 瀹炵幇瀵艰埅椤圭殑浜掓枼灞曞紑閫昏緫鍜屾纭殑閫変腑鏁堟灉 - **闂鍒嗘瀽**: - 鐐瑰嚮鏈夊瓙椤圭殑瀵艰埅椤规椂锛屽簲璇ユ敮鎸佸睍寮€/鏀惰捣鍒囨崲 - 灞曞紑鏃堕粯璁ょ涓€涓瓙椤瑰簲璇ユ湁閫変腑鏁堟灉 - 澶氫釜瀵艰埅椤逛笉搴旇鍚屾椂灞曞紑锛屽簲璇ヤ簰鏂? - 鏀惰捣鏃跺簲璇ユ竻闄ゆ墍鏈夐€変腑鐘舵€?- **淇敼鏂囦欢**: - `ViewModels/MainWindowViewModel.cs` - 浼樺寲 NavigateToPage 鏂规硶锛屽疄鐜颁簰鏂ュ睍寮€閫昏緫 - **浜や簰閫昏緫**: - **鏈夊瓙椤圭殑瀵艰埅椤?*: - 鏈睍寮€鏃讹細灞曞紑骞堕€変腑绗竴涓瓙椤? - 宸插睍寮€鏃讹細鏀惰捣骞舵竻闄ら€変腑鐘舵€? - 浜掓枼锛氬睍寮€涓€涓椂鑷姩鏀惰捣鍏朵粬 - **鏃犲瓙椤圭殑瀵艰埅椤?*锛氱洿鎺ラ€変腑锛屽悓鏃舵敹璧锋墍鏈夊叾浠栧睍寮€椤?- **鎶€鏈疄鐜?*: ```csharp private void NavigateToPage(NavigationItem navigationItem) { if (navigationItem.HasChildren) { if (navigationItem.IsExpanded) { // 鏀惰捣閫昏緫 navigationItem.IsExpanded = false; // 娓呴櫎鎵€鏈夐€変腑鐘舵€? SelectedNavigationItem = null; } else { // 灞曞紑閫昏緫 // 鍏堟敹璧峰叾浠栨墍鏈夊睍寮€鐨勫鑸」 foreach (var item in _navigationItems) { if (item != navigationItem) { item.IsExpanded = false; // 娓呴櫎閫変腑鐘舵€? } } // 灞曞紑褰撳墠椤瑰苟閫変腑绗竴涓瓙椤? navigationItem.IsExpanded = true; var firstChild = navigationItem.Children[0]; firstChild.IsSelected = true; SelectedNavigationItem = firstChild; } } } ``` - **鍔熻兘鐗规€?*: - **浜掓枼灞曞紑**: 鍚屾椂鍙兘鏈変竴涓鑸」灞曞紑 - **鍒囨崲灞曞紑**: 鐐瑰嚮宸插睍寮€鐨勯」浼氭敹璧? - **鑷姩閫変腑**: 灞曞紑鏃惰嚜鍔ㄩ€変腑绗竴涓瓙椤? - **鐘舵€佺鐞?*: 鏀惰捣鏃舵竻闄ゆ墍鏈夐€変腑鐘舵€? - **鏍囩椤电鐞?*: 閫変腑瀛愰」鏃惰嚜鍔ㄥ垱寤哄搴旀爣绛鹃〉 - **鐢ㄦ埛浣撻獙**: - **鐩磋鎿嶄綔**: 鐐瑰嚮"鐢ㄦ埛绠$悊"灞曞紑锛屽啀鐐瑰嚮鏀惰捣 - **浜掓枼琛屼负**: 灞曞紑"鐢ㄦ埛绠$悊"鏃讹紝"绯荤粺璁剧疆"鑷姩鏀惰捣 - **閫変腑鍙嶉**: 灞曞紑鍚庣涓€涓瓙椤规湁鏄庢樉鐨勯€変腑鏁堟灉 - **鐘舵€佷竴鑷?*: 鏀惰捣鏃舵墍鏈夌姸鎬侀兘姝g‘娓呴櫎 - **娴嬭瘯缁撴灉**: - 缂栬瘧鎴愬姛锛屾棤閿欒 鉁? - 浜掓枼灞曞紑鍔熻兘姝e父 鉁? - 灞曞紑/鏀惰捣鍒囨崲姝e父 鉁? - 绗竴涓瓙椤归€変腑鏁堟灉姝e父 鉁? - 鐘舵€佺鐞嗘纭?鉁?- **璇存槑**: - 鎴愬姛瀹炵幇浜嗗鑸」鐨勪簰鏂ュ睍寮€閫昏緫 - 鎻愪緵浜嗘洿鐩磋銆佹洿绗﹀悎鐢ㄦ埛涔犳儻鐨勪氦浜掍綋楠? - 瀹屽杽浜嗙姸鎬佺鐞嗗拰閫変腑鏁堟灉 ### 濞h濮?AvaloniaEdit.TextMate 娴狅絿鐖滅紓鏍帆閸c劌濮涢懗?- **閺冦儲婀?*: 2025楠?閺?0閺?- **娣囶喗鏁奸崘鍛啇**: 濞h濮為崺杞扮艾 AvaloniaEdit.TextMate 閻ㄥ嫪鍞惍浣虹椽鏉堟垵娅掓い鐢告桨閿涘本鏁幐浣筋嚔濞夋洟鐝禍?- **閺傛澘顤冮崝鐔诲厴**: - 閺€顖涘瘮婢舵氨顫掔紓鏍柤鐠囶叀鈻堥惃鍕嚔濞夋洟鐝禍顕嗙礄C#, JavaScript, TypeScript, HTML, CSS, JSON, XML, Python, Java, SQL閿? - 閹绘劒绶垫禒锝囩垳缂傛牞绶崳銊ф畱鐎瑰本鏆?UI 閻e矂娼? - 閺€顖涘瘮鐠囶叀鈻堥崚鍥ㄥ床閿涘矁鍤滈崝銊ョ安閻劌顕惔鏃傛畱鐠囶厽纭舵妯瑰瘨鐟欏嫬鍨? - 閹绘劒绶靛〒鍛敄娴狅絿鐖滈崪灞剧壐瀵繐瀵叉禒锝囩垳閻ㄥ嫬濮涢懗鑺ュ瘻闁? - 閸愬懐鐤嗛崥鍕潚鐠囶叀鈻堥惃鍕仛娓氬鍞惍浣鼓侀弶?- **閺傛澘顤冮弬鍥︽**: - ViewModels/Pages/EditorPageViewModel.cs - 娴狅絿鐖滅紓鏍帆閸c劑銆夐棃銏㈡畱 ViewModel - Views/Pages/EditorPageView.axaml - 娴狅絿鐖滅紓鏍帆閸c劑銆夐棃銏㈡畱 UI 鐎规矮绠? - Views/Pages/EditorPageView.axaml.cs - 娴狅絿鐖滅紓鏍帆閸c劑銆夐棃銏㈡畱娴狅絿鐖滈柅鏄忕帆 - **娣囶喗鏁奸弬鍥︽**: - MyAvaloniaApp.csproj - 濞h濮?AvaloniaEdit 閸?AvaloniaEdit.TextMate 閸栧懎绱╅悽? - ViewModels/MainWindowViewModel.cs - 閸︺劌顕遍懜顏堛€嶆稉顓熷潑閸?娴狅絿鐖滅紓鏍帆閸?妞ょ敻娼?- **閸栧懎绱╅悽?*: `xml ` - **閺嶇绺鹃崝鐔诲厴**: - **鐠囶厽纭舵妯瑰瘨**: 娴h法鏁?TextMate 鐠囶厽纭跺鏇熸惛閹绘劒绶垫稉鎾茬瑹閻ㄥ嫯顕㈠▔鏇㈢彯娴滎喗鏁幐? - **娑撳顣介崚鍥ㄥ床**: 閺€顖涘瘮 DarkPlus 娑撳顣? - **鐠囶叀鈻堥弨顖涘瘮**: 10缁夊秳瀵屽ù浣虹椽缁嬪顕㈢懛鈧? - **娴狅絿鐖滅粈杞扮伐**: 濮e繒顫掔拠顓♀枅闁姤婀佺€瑰本鏆i惃鍕仛娓氬鍞惍? - **鐎圭偞妞傞崚鍥ㄥ床**: 閸掑洦宕茬拠顓♀枅閺冩儼鍤滈崝銊︽纯閺傛媽顕㈠▔鏇㈢彯娴滎喛顫夐崚?- **鐎佃壈鍩呮い褰掑帳缂?*: - ID: "editor" - 閺嶅洭顣? "娴狅絿鐖滅紓鏍帆閸? - 閸ョ偓鐖? CodeBracket - **閹垛偓閺堫垰鐤勯悳?*: - 娴h法鏁?TextEditor 閹貉傛娴f粈璐熸禒锝囩垳缂傛牞绶€圭懓娅? - 娴h法鏁?RegistryOptions 濞夈劌鍞?TextMate 鐠囶厽纭剁憴鍕灟 - 娴h法鏁?SetGrammar() 閺傝纭堕崝銊︹偓浣稿瀼閹广垼顕㈠▔鏇㈢彯娴? - ViewModel 閻╂垵鎯夌拠顓♀枅闁瀚ㄩ崣妯哄閿涘苯鐤勯弮鑸垫纯閺傛壆绱潏鎴濇珤 - **濞村鐦紒鎾寸亯**: - 缂傛牞鐦ч幋鎰閿涘本妫ら柨娆掝嚖 閴? - AvaloniaEdit 濮濓絿鈥橀崝鐘烘祰 閴? - TextMate 閸掓繂顫愰崠鏍ㄥ灇閸?閴? - 鐠囶叀鈻堥崚鍥ㄥ床閸旂喕鍏樺锝呯埗 閴? - 缁€杞扮伐娴狅絿鐖滃锝団€橀弰鍓с仛 閴?- **鐠囧瓨妲?*: - 閹存劕濮涢梿鍡樺灇娴?AvaloniaEdit.TextMate 娴狅絿鐖滅紓鏍帆閸? - 閹绘劒绶垫禍鍡楃暚閺佸娈戞禒锝囩垳缂傛牞绶担鎾荤崣 - 閺€顖涘瘮鐠囶厽纭舵妯瑰瘨閵嗕浇顢戦崣閿嬫▔缁€鎭掆偓浣峰瘜妫版ê鍨忛幑銏㈢搼妤傛楠囬崝鐔诲厴 - 娑撳搫鎮楃紒顓犳畱娴狅絿鐖滅紓鏍帆閸旂喕鍏橀幍鈺佺潔閹垫挷绗呮禍鍡楃唨绾偓 ### 濞h濮?AvaloniaEdit.TextMate 娴狅絿鐖滅紓鏍帆閸c劌濮涢懗?- **閺冦儲婀?*: 2025楠?閺?0閺?- **娣囶喗鏁奸崘鍛啇**: 濞h濮為崺杞扮艾 AvaloniaEdit.TextMate 閻ㄥ嫪鍞惍浣虹椽鏉堟垵娅掓い鐢告桨 - **閺傛澘顤冮崝鐔诲厴**: - 閺€顖涘瘮婢舵氨顫掔紓鏍柤鐠囶叀鈻堥惃鍕嚔濞夋洟鐝禍顕嗙礄C#, JavaScript, TypeScript, HTML, CSS, JSON, XML, Python, Java, SQL閿? - 閹绘劒绶垫禒锝囩垳缂傛牞绶崳銊ф畱鐎瑰本鏆?UI 閻e矂娼? - 閺€顖涘瘮鐠囶叀鈻堥崚鍥ㄥ床閿涘矁鍤滈崝銊ョ安閻劌顕惔鏃傛畱鐠囶厽纭舵妯瑰瘨鐟欏嫬鍨? - 閹绘劒绶靛〒鍛敄娴狅絿鐖滈崪灞剧壐瀵繐瀵叉禒锝囩垳閻ㄥ嫬濮涢懗鑺ュ瘻闁? - 閸愬懐鐤嗛崥鍕潚鐠囶叀鈻堥惃鍕仛娓氬鍞惍浣鼓侀弶?- **閺傛澘顤冮弬鍥︽**: - ViewModels/Pages/EditorPageViewModel.cs - 娴狅絿鐖滅紓鏍帆閸c劑銆夐棃銏㈡畱 ViewModel - Views/Pages/EditorPageView.axaml - 娴狅絿鐖滅紓鏍帆閸c劑銆夐棃銏㈡畱 UI 鐎规矮绠? - Views/Pages/EditorPageView.axaml.cs - 娴狅絿鐖滅紓鏍帆閸c劑銆夐棃銏㈡畱娴狅絿鐖滈柅鏄忕帆 - **娣囶喗鏁奸弬鍥︽**: - MyAvaloniaApp.csproj - 濞h濮?AvaloniaEdit 閸?AvaloniaEdit.TextMate 閸栧懎绱╅悽? - ViewModels/MainWindowViewModel.cs - 閸︺劌顕遍懜顏堛€嶆稉顓熷潑閸?娴狅絿鐖滅紓鏍帆閸?妞ょ敻娼?- **閸栧懎绱╅悽?*: `xml ` - **閺嶇绺鹃崝鐔诲厴**: - **鐠囶厽纭舵妯瑰瘨**: 娴h法鏁?TextMate 鐠囶厽纭跺鏇熸惛閹绘劒绶垫稉鎾茬瑹閻ㄥ嫯顕㈠▔鏇㈢彯娴滎喗鏁幐? - **娑撳顣介崚鍥ㄥ床**: 閺€顖涘瘮 DarkPlus 娑撳顣? - **鐠囶叀鈻堥弨顖涘瘮**: 10缁夊秳瀵屽ù浣虹椽缁嬪顕㈢懛鈧? - **娴狅絿鐖滅粈杞扮伐**: 濮e繒顫掔拠顓♀枅闁姤婀佺粈杞扮伐娴狅絿鐖? - **鐎圭偞妞傞崚鍥ㄥ床**: 閸掑洦宕茬拠顓♀枅閺冩儼鍤滈崝銊︽纯閺傛媽顕㈠▔鏇㈢彯娴滎喛顫夐崚?- **閹垛偓閺堫垰鐤勯悳?*: - 娴h法鏁?TextEditor 閹貉傛娴f粈璐熸禒锝囩垳缂傛牞绶€圭懓娅? - 娴h法鏁?RegistryOptions 濞夈劌鍞?TextMate 鐠囶厽纭剁憴鍕灟 - 娴h法鏁?SetGrammar() 閺傝纭堕崝銊︹偓浣稿瀼閹广垼顕㈠▔鏇㈢彯娴? - ViewModel 閻╂垵鎯夌拠顓♀枅闁瀚ㄩ崣妯哄閿涘苯鐤勯弮鑸垫纯閺傛壆绱潏鎴濇珤 - **濞村鐦紒鎾寸亯**: - 缂傛牞鐦ч幋鎰閿涘本妫ら柨娆掝嚖 閴? - AvaloniaEdit 濮濓絿鈥橀崝鐘烘祰 閴?- **鐠囧瓨妲?*: - 閹存劕濮涢梿鍡樺灇娴?AvaloniaEdit.TextMate 娴狅絿鐖滅紓鏍帆閸? - 閹绘劒绶垫禍鍡楃暚閺佸娈戞禒锝囩垳缂傛牞绶担鎾荤崣 - 娑撳搫鎮楃紒顓犳畱娴狅絿鐖滅紓鏍帆閸旂喕鍏橀幍鈺佺潔閹垫挷绗呮禍鍡楃唨绾偓 ### 閲嶆瀯 EditorPageView 浠ユ敮锟?MVVM 璇█鍒囨崲 - **鏃ユ湡**: 2025锟?0锟?1锟?- **淇敼鍐呭**: 灏嗕唬鐮佺紪杈戝櫒椤甸潰鐨勮娉曢珮浜垵濮嬪寲閫昏緫鎶界鍒伴檮鍔犲睘鎬э紝閫氳繃鏁版嵁缁戝畾鎺у埗璇█鍒囨崲 - **淇敼鏂囦欢**: - `Views/Behaviors/TextMateHelper.cs` - `Views/Pages/EditorPageView.axaml` - `Views/Pages/EditorPageView.axaml.cs` - **瀹炵幇鏂瑰紡**: - 鏂板 `TextMateHelper` 闄勫姞灞炴€х粺涓€绠$悊 TextMate 鍒濆鍖栦笌璇硶鍒囨崲 - 锟?XAML 涓粦锟?`TextMateHelper.Language` 锟?`SelectedLanguage`锛岀Щ闄や唬鐮佸悗缃洃锟? - 绮剧畝 `EditorPageView` 浠g爜鍚庣疆锛屼繚鐣欏熀纭€鍒濆锟?- **娴嬭瘯缁撴灉**: - 鎵嬪姩杩愯鐣岄潰楠岃瘉璇█鍒囨崲璇硶楂樹寒姝e父 锟? - 鏈墽琛岃嚜鍔ㄥ寲娴嬭瘯锛圲I 灞傛敼鍔級 - **澶囨敞**: - 褰撳墠瀹炵幇鍙墿灞曞叾浠栦富棰樻垨璇█锛屽悗缁彲锟?ViewModel 涓拷鍔犳牸寮忓寲閫昏緫 ### 鏂板 DialogHost 绀轰緥椤甸潰 - **鏃ユ湡**: 2025骞?0鏈?1鏃?- **淇敼鍐呭**: 闆嗘垚 DialogHost.Avalonia锛屾柊澧炵ず渚嬮〉闈㈠苟鍔犲叆瀵艰埅锛屾敮鎸侀€氳繃 MVVM 鎺у埗瀵硅瘽妗嗙殑鎵撳紑涓庡叧闂?- **鏂板鏂囦欢**: - `ViewModels/Pages/DialogHostPageViewModel.cs` 鈥?瀹氫箟瀵硅瘽妗嗙姸鎬併€佸懡浠ゅ強鍙嶉淇℃伅 - `Views/Pages/DialogHostPageView.axaml` 鈥?甯冨眬 DialogHost 鍙婃紨绀虹晫闈? - `Views/Pages/DialogHostPageView.axaml.cs` 鈥?鍒濆鍖栨柊椤甸潰瑙嗗浘 - **淇敼鏂囦欢**: - `App.axaml` 鈥?鍚堝苟 `avares://DialogHost.Avalonia/Styles.xaml` 鏍峰紡璧勬簮锛岀‘淇濇ā鏉垮彲鐢? - `MyAvaloniaApp.csproj` 鈥?寮曞叆 `DialogHost.Avalonia` 鍖呭紩鐢? - `ViewModels/MainWindowViewModel.cs` 鈥?娉ㄥ唽鈥滃璇濇绀轰緥鈥濆鑸」骞剁粦瀹氭柊椤甸潰 - **鍔熻兘璇存槑**: - 閫氳繃 `IsDialogOpen` 涓庡懡浠ょ粦瀹氬疄鐜?MVVM 寮圭獥鎺у埗 - 鏀寔纭/鍙栨秷鎿嶄綔涓庘€滆浣忛€夋嫨鈥濋€夐」锛屽睍绀烘渶鍚庝竴娆℃搷浣滅粨鏋? - 淇濇寔瀵硅瘽妗嗘牱寮忎笌搴旂敤鐜版湁涓婚涓€鑷? - 璋冩暣绀轰緥甯冨眬浣跨敤 `Margin` 鎺у埗澶栬竟璺濓紝閬垮厤瀵?`Grid.Padding` 鐨勪緷璧? - 鏂板鈥滈€氱敤/鎴愬姛/澶辫触/璀﹀憡鈥濆洓绫荤ず渚嬫寜閽紝鑷姩鍒囨崲鏍囬銆佹枃妗堛€佹寜閽枃鏈強鏄惁灞曠ず娆$骇鎿嶄綔 - 瀵硅瘽妗嗗唴瀹瑰姞鍏ュ浘鏍囦笌寮鸿皟鑹茬粦瀹氾紝绐佸嚭鍦烘櫙宸紓骞朵繚鎸佹牱寮忕粺涓€ - WrapPanel 鍘婚櫎 `Spacing`锛屾敼涓烘寜閽杈硅窛瀹炵幇闂磋窛浠ュ吋瀹瑰綋鍓?Avalonia 鐗堟湰 - 瀵硅瘽妗嗗ご閮ㄦ敼鐢?`Grid` 鎺у埗鍥炬爣涓庢枃鏈垪瀹斤紝骞惰缃弿杩版枃鏈?`MaxWidth` 闃叉鍐呭婧㈠嚭 - 鎴愬姛/澶辫触/璀﹀憡鍦烘櫙鏀寔鍙傛暟鍖栫鏁拌嚜鍔ㄥ叧闂紙榛樿 2s锛夛紝鎸夐挳闅愯棌涓旀彁绀轰細鍦ㄨ秴鏃跺悗鑷姩璁板綍鎿嶄綔 - 鏂板鈥滅‘璁ゅ脊绐椻€濈ず渚嬩互鍙?5 绉掑欢鏃剁殑鎴愬姛妗堜緥锛屾紨绀?`variant:seconds` 鍙傛暟鏍煎紡 - **娴嬭瘯缁撴灉**: - 鎵嬪姩杩愯楠岃瘉锛氬璇濇鍙甯告墦寮€銆佺‘璁や笌鍙栨秷 - 瀵艰埅椤圭偣鍑诲彲姝g‘鍒涘缓鏍囩椤靛苟鍔犺浇绀轰緥椤甸潰 ### 鏇存柊蹇界暐鏂囦欢 - **鏃ユ湡**: 2025骞?0鏈?1鏃?- **淇敼鍐呭**: 鏂板 `.gitignore`锛屽皢 `.vs` 涓?`bin` 鐩綍鎺掗櫎鍦ㄧ増鏈帶鍒朵箣澶?- **鐩殑**: 閬垮厤灏嗕复鏃舵瀯寤轰骇鐗╀笌鏈湴寮€鍙戦厤缃彁浜よ嚦浠撳簱锛屼繚鎸佷粨搴撴暣娲? ### 浼樺寲 .gitignore 妯℃澘 - **鏃ユ湡**: 2025骞?0鏈?1鏃?- **淇敼鍐呭**: 灏?`.gitignore` 鏇挎崲涓?Visual Studio 椤圭洰鐨勬爣鍑嗘ā鏉匡紝娑电洊鐢ㄦ埛閰嶇疆銆佹瀯寤鸿緭鍑恒€佽皟璇曟棩蹇楀強甯歌宸ュ叿鐢熸垚鏂囦欢 - **鐩殑**: 鎻愪緵鏇村叏闈㈢殑蹇界暐绛栫暐锛屽噺灏戠幆澧冨樊寮傚鑷寸殑鍐椾綑鏂囦欢杩涘叆鐗堟湰搴? ### 璋冩暣蹇界暐鐩綍 - **鏃ユ湡**: 2025骞?0鏈?1鏃?- **淇敼鍐呭**: 鍦?`.gitignore` 涓樉寮忔坊鍔犳牴鐩綍 `bin/`銆乣obj/`銆乣publish/` 鐨勫拷鐣ヨ鍒?- **鐩殑**: 纭繚甯歌鏋勫缓浜х墿鐩綍鍦ㄤ换浣曞钩鍙颁笅鍧囦笉浼氳鎰忓鎻愪氦 ### ReactiveUI 鏋舵瀯妫€鏌?- **鏃ユ湡**: 2025骞?鏈堬紙褰撳墠鏃堕棿锛?- **淇敼鍐呭**: 鍏ㄩ潰妫€鏌ラ」鐩槸鍚﹂伒寰?ReactiveUI 鏈€浣冲疄璺?- **妫€鏌ョ粨鏋?*: 鉁?**鎬讳綋璇勫垎 9.0/10** - 椤圭洰鍩烘湰瀹屽叏閬靛惊 ReactiveUI 鏈€浣冲疄璺?- **妫€鏌ユ枃浠?*: - 鏂板缓 `ReactiveUI鏋舵瀯妫€鏌ユ姤鍛?md` - 璇︾粏鐨勬灦鏋勬鏌ユ姤鍛?- **妫€鏌ラ」鐩?*: - 鉁?ViewModels 缁ф壙缁撴瀯锛氭墍鏈?ViewModel 姝g‘缁ф壙 ReactiveObject 鎴?IRoutableViewModel - 鉁?Views 缁ф壙缁撴瀯锛氭墍鏈?View 姝g‘缁ф壙 ReactiveUserControl 鎴?ReactiveWindow - 鉁?鍝嶅簲寮忓睘鎬ч€氱煡锛氭纭娇鐢?RaiseAndSetIfChanged - 鉁?IScreen/RoutingState锛氭纭疄鐜板拰浣跨敤璺敱绯荤粺 - 鉁?ReactiveCommand锛氭纭娇鐢ㄥ搷搴斿紡鍛戒护 - 鉁?鍝嶅簲寮忕紪绋嬫ā寮忥細浣跨敤 WhenAnyValue 绛夊搷搴斿紡鎿嶄綔绗? - 鉁?ViewLocator锛氳嚜瀹氫箟瀹炵幇骞舵纭敞鍐? - 鉁?璺敱绯荤粺闆嗘垚锛氭纭娇鐢?RoutedViewHost - 鉁?渚濊禆娉ㄥ叆閰嶇疆锛氭纭敞鍐?ReactiveUI 鏈嶅姟 - 鉁?XAML 缁戝畾锛氭纭娇鐢?reactive 鍛藉悕绌洪棿鍜岀粦瀹氳娉?- **娼滃湪闂**: - 鈿狅笍 MainWindow ViewModel 璁剧疆锛氬悓鏃惰缃?ViewModel 鍜?DataContext锛屽缓璁粺涓€ - 馃挕 ViewLocator锛氬彲浠ヨ€冭檻鏀寔渚濊禆娉ㄥ叆鍒涘缓 View 瀹炰緥 - 馃挕 璁㈤槄绠$悊锛氬彲浠ヨ€冭檻浣跨敤 WhenActivated 杩涜璁㈤槄娓呯悊 - **寤鸿**: 1. 鑰冭檻灏?MainWindow 鏀逛负 `ReactiveWindow` 浠ョ粺涓€鏋舵瀯 2. 鏀硅繘 ViewLocator 浠ユ敮鎸佷緷璧栨敞鍏? 3. 鑰冭檻浣跨敤 WhenActivated 杩涜璁㈤槄绠$悊锛堝彲閫夛級 ### 淇 ReactiveUI 鏋舵瀯娼滃湪闂 - **鏃ユ湡**: 2025骞?鏈堬紙褰撳墠鏃堕棿锛?- **淇敼鍐呭**: 淇 ReactiveUI 鏋舵瀯妫€鏌ヤ腑鍙戠幇鐨勬綔鍦ㄩ棶棰?- **淇敼鏂囦欢**: - `MainWindow.axaml.cs` - 鏀逛负 `ReactiveWindow` 骞跺疄鐜?`IActivatableView` - `MainWindow.axaml` - 娣诲姞 `x:TypeArguments="vm:MainWindowViewModel"` - `Views/ViewLocator.cs` - 鏀寔浠庝緷璧栨敞鍏ュ鍣ㄥ垱寤?View 瀹炰緥 - `Extensions/ServiceCollectionExtensions.cs` - 娉ㄥ唽 MainWindowViewModel 鍒颁緷璧栨敞鍏ュ鍣? - `App.axaml.cs` - 娉ㄥ唽 ServiceProvider 鍒?Splat锛岃皟鏁存湇鍔℃敞鍐岄『搴? - `ViewModels/MainWindowViewModel.cs` - 娣诲姞璁㈤槄绠$悊娉ㄩ噴璇存槑 - **淇鍐呭**: 1. **MainWindow ViewModel 缁熶竴**: - 灏?`MainWindow` 浠?`ReactiveWindow` 鏀逛负 `ReactiveWindow` - 绉婚櫎浜嗗悓鏃惰缃?`ViewModel` 鍜?`DataContext` 鐨勪笉涓€鑷村仛娉? - 瀹炵幇 `IActivatableView` 鎺ュ彛锛屾坊鍔?`WhenActivated` 鏀寔璁㈤槄绠$悊 - 鏇存柊 XAML 娣诲姞 `x:TypeArguments` 鎸囧畾娉涘瀷绫诲瀷 2. **ViewLocator 渚濊禆娉ㄥ叆鏀寔**: - 浼樺厛浠庝緷璧栨敞鍏ュ鍣紙IServiceProvider锛夊垱寤?View 瀹炰緥 - 濡傛灉 DI 涓病鏈夋敞鍐岋紝鍒欏洖閫€鍒颁娇鐢?`Activator.CreateInstance` - 娣诲姞寮傚父澶勭悊鍜岃皟璇曟棩蹇? 3. **渚濊禆娉ㄥ叆閰嶇疆浼樺寲**: - 鍦?`AddViewModels` 涓敞鍐?`MainWindowViewModel`锛岄€氳繃 `AppViewModel` 鑾峰彇 - 璋冩暣鏈嶅姟娉ㄥ唽椤哄簭锛氬厛娉ㄥ唽 `AppViewModel`锛屽啀娉ㄥ唽 `MainWindowViewModel` - 鍦?`App.axaml.cs` 涓敞鍐?`ServiceProvider` 鍒?Splat 瀹瑰櫒锛屼緵 ViewLocator 浣跨敤 4. **璁㈤槄绠$悊鏀硅繘**: - 鍦?`MainWindow` 涓坊鍔?`WhenActivated` 鏀寔锛屼负灏嗘潵鍙兘鐨勭獥鍙g骇璁㈤槄鍋氬噯澶? - 鍦?`MainWindowViewModel` 涓坊鍔犳敞閲婅鏄庤闃呯殑鐢熷懡鍛ㄦ湡绠$悊 - **鎶€鏈敼杩?*: - **鏋舵瀯缁熶竴鎬?*: MainWindow 鐜板湪瀹屽叏閬靛惊 ReactiveUI 鐨勬ā寮忥紝ViewModel 灞炴€х被鍨嬩笌绐楀彛娉涘瀷鍙傛暟涓€鑷? - **渚濊禆娉ㄥ叆闆嗘垚**: ViewLocator 鐜板湪鍙互鍏呭垎鍒╃敤渚濊禆娉ㄥ叆绯荤粺鍒涘缓 View 瀹炰緥 - **鐢熷懡鍛ㄦ湡绠$悊**: 閫氳繃 `IActivatableView` 鍜?`WhenActivated` 涓哄皢鏉ョ殑璁㈤槄绠$悊鎻愪緵鍩虹璁炬柦 - **浠g爜鍙淮鎶ゆ€?*: 鏇存竻鏅扮殑鏋舵瀯鍜屾敞閲婏紝渚夸簬鍚庣画缁存姢鍜屾墿灞?- **浼樺娍**: - 鉁?瀹屽叏绗﹀悎 ReactiveUI 鏈€浣冲疄璺? - 鉁?View 鍙互閫氳繃渚濊禆娉ㄥ叆鑾峰彇鏈嶅姟 - 鉁?鏇村ソ鐨勭敓鍛藉懆鏈熺鐞嗗拰鍐呭瓨绠$悊 - 鉁?鏋舵瀯鏇村姞缁熶竴鍜屾竻鏅? ### 浼樺寲 ViewLocator 鍜?HostBuilder 鎵ц椤哄簭鐨勬敞閲婅鏄?- **鏃ユ湡**: 2025骞?鏈?0鏃?- **淇敼鍐呭**: 浼樺寲 App.axaml.cs 涓叧浜?ViewLocator 鍜?HostBuilder 鎵ц椤哄簭鐨勬敞閲婅鏄?- **淇敼鏂囦欢**: - `App.axaml.cs` - 浼樺寲 Initialize() 鍜?OnFrameworkInitializationCompleted() 鏂规硶鐨勬敞閲?- **闂鍒嗘瀽**: - **鎵ц椤哄簭纭**: ViewLocator 鍦?Initialize() 涓敞鍐岋紙鍏堬級锛孒ostBuilder 鍦?OnFrameworkInitializationCompleted() 涓垱寤猴紙鍚庯級 - **鍘熸敞閲婇棶棰?*: OnFrameworkInitializationCompleted() 涓殑娉ㄩ噴璇?蹇呴』鍦?ViewLocator 棣栨浣跨敤涔嬪墠瀹屾垚"鏈夎瀵兼€? - ViewLocator 宸茬粡鍦?Initialize() 涓敞鍐岋紝涓嶅瓨鍦?棣栨浣跨敤涔嬪墠"鐨勯棶棰? - ViewLocator 鏈夊洖閫€鏈哄埗锛屽彲浠ュ湪 ServiceProvider 鏈敞鍐屾椂浣跨敤 Activator.CreateInstance - **娉ㄩ噴鍚堢悊鎬?*: 闇€瑕佹槑纭鏄庢墽琛岄『搴忓拰涓轰粈涔堣繖鏍风殑椤哄簭鏄畨鍏ㄧ殑 - **浼樺寲鍐呭**: - **Initialize() 鏂规硶娉ㄩ噴浼樺寲**: - 鏄庣‘璇存槑鎵ц椤哄簭锛歏iewLocator 鍏堟敞鍐岋紝ServiceProvider 鍚庢敞鍐? - 寮鸿皟 ViewLocator 鐨勫洖閫€鏈哄埗锛岃鏄庡厛娉ㄥ唽鏄畨鍏ㄧ殑 - 瑙i噴鍗充娇姝ゆ椂 ServiceProvider 鏈垱寤猴紝涔熶笉褰卞搷 ViewLocator 鐨勬敞鍐? - **OnFrameworkInitializationCompleted() 鏂规硶娉ㄩ噴浼樺寲**: - 鏄庣‘璇存槑 ViewLocator 宸插湪 Initialize() 涓敞鍐? - 瑙i噴铏界劧 ViewLocator 鍙互鍥為€€鍒?Activator.CreateInstance锛屼絾娉ㄥ唽 ServiceProvider 鍚? - 璇存槑 ViewLocator 灏嗕紭鍏堜娇鐢ㄤ緷璧栨敞鍏ュ垱寤?View锛岃繖鏍峰彲浠ユ敞鍏?View 鎵€闇€鐨勬湇鍔? - 琛ュ厖璇存槑娉ㄥ唽鍚?ViewLocator 灏嗕紭鍏堜娇鐢?DI 瀹瑰櫒鍒涘缓 View 瀹炰緥 - **鎶€鏈粏鑺?*: - **鎵ц椤哄簭**: Initialize() 鈫?OnFrameworkInitializationCompleted() - **ViewLocator 娉ㄥ唽鏃舵満**: 鍦?Initialize() 涓紝璺敱绯荤粺浣跨敤涔嬪墠 - **ServiceProvider 娉ㄥ唽鏃舵満**: 鍦?OnFrameworkInitializationCompleted() 涓紝MainWindow 鍒涘缓鍜岃矾鐢卞鑸箣鍓? - **鍥為€€鏈哄埗**: ViewLocator 棣栧厛灏濊瘯浠?DI 瀹瑰櫒鑾峰彇 View锛屽け璐ュ垯浣跨敤 Activator.CreateInstance - **浼樺娍**: - 鉁?娉ㄩ噴鏇村噯纭湴鍙嶆槧瀹為檯鐨勬墽琛岄『搴? - 鉁?鏄庣‘璇存槑浜嗕负浠€涔堣繖鏍风殑椤哄簭鏄畨鍏ㄧ殑 - 鉁?瑙i噴浜嗗洖閫€鏈哄埗鍜屼緷璧栨敞鍏ョ殑浼樺厛绾у叧绯? - 鉁?鎻愰珮浜嗕唬鐮佺殑鍙鎬у拰鍙淮鎶ゆ€? ### 淇 MainWindowViewModel 鍒濆鍖栨椂鏍囩椤典负绌虹殑闂 - **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 淇 `MainWindowViewModel` 鏋勯€犲嚱鏁颁腑 `_screen.Router.ViewModels` 绗竴娆′负 null 瀵艰嚧鏍囩椤典负绌虹殑闂 - **淇敼鏂囦欢**: - `AuroraDesk.Presentation/ViewModels/MainWindowViewModel.cs` - **闂鍒嗘瀽**: - **鏍规湰鍘熷洜**: 鍒濆鍖栨椂娌℃湁鑷姩瀵艰埅鍒颁换浣曢〉闈紝瀵艰嚧 `Router.CurrentViewModel` 绗竴娆′负 null - **鐥囩姸**: 绗竴娆″姞杞芥椂 `Router.ViewModels` 涓虹┖闆嗗悎锛屾爣绛鹃〉锛圱ab锛変笉鏄剧ず - **褰卞搷**: 搴旂敤鍚姩鍚庢病鏈夐粯璁ら〉闈㈡樉绀猴紝鐢ㄦ埛闇€瑕佹墜鍔ㄧ偣鍑诲鑸」鎵嶈兘鐪嬪埌鍐呭 - **瑙e喅鏂规**: - 鍦?`MainWindowViewModel` 鏋勯€犲嚱鏁颁腑锛屽湪璁剧疆瀹屾墍鏈夎闃呭悗锛岃嚜鍔ㄥ鑸埌浠〃鏉块〉闈? - 浣跨敤 `Observable.Start` 閰嶅悎 `RxApp.MainThreadScheduler` 寤惰繜鎵ц瀵艰埅锛岀‘淇濇墍鏈夎闃呴兘宸茶缃畬鎴? - 鑷姩璁剧疆浠〃鏉垮鑸」涓洪€変腑鐘舵€?- **鎶€鏈疄鐜?*: ```csharp // 鍒濆鍖栧鑸細鑷姩瀵艰埅鍒颁华琛ㄦ澘椤甸潰 Observable.Start(() => { var dashboardItem = NavigationItems.FirstOrDefault(item => item.Id == "dashboard"); if (dashboardItem != null && dashboardItem.ViewModel != null) { dashboardItem.IsSelected = true; SelectedNavigationItem = dashboardItem; _navigationService.NavigateToPage(dashboardItem); } }, RxApp.MainThreadScheduler); ``` - **鍏抽敭鐐?*: - 浣跨敤 `Observable.Start` 纭繚鍦ㄤ富绾跨▼涓婂紓姝ユ墽琛? - 寤惰繜鎵ц纭繚 `CurrentViewModel` 璁㈤槄宸茶缃畬鎴? - 瀵艰埅鍚庝細鑷姩瑙﹀彂 `OnRouterViewModelChanged` 鍒涘缓鏍囩椤?- **浼樺娍**: - 鉁?淇浜嗗垵濮嬪寲鏃舵爣绛鹃〉涓虹┖鐨勯棶棰? - 鉁?搴旂敤鍚姩鏃惰嚜鍔ㄦ樉绀轰华琛ㄦ澘椤甸潰 - 鉁?鐢ㄦ埛浣撻獙鏇村ソ锛屾棤闇€鎵嬪姩瀵艰埅 - 鉁?绗﹀悎甯歌搴旂敤鐨勯粯璁よ涓? ### 浼樺寲瀵艰埅鍒囨崲鎬ц兘锛屼慨澶嶅崱椤块棶棰?- **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 浼樺寲 `MainWindowViewModel` 涓鑸垏鎹㈢殑鎬ц兘锛屼慨澶嶅儚骞荤伅鐗囦竴鏍峰崱椤跨殑闂 - **淇敼鏂囦欢**: - `AuroraDesk.Presentation/ViewModels/MainWindowViewModel.cs` - **闂鍒嗘瀽**: - **鎬ц兘鐡堕**: `NavigateToPage` 鏂规硶涓瘡娆″鑸兘瑕侀亶鍘嗘墍鏈夊鑸」鍜屽瓙椤规潵閲嶇疆鐘舵€侊紝杩欐槸 O(n虏) 鎿嶄綔 - **閲嶅鎿嶄綔**: `NavigateToPage` 鏇存柊瀵艰埅椤圭姸鎬佸悗锛宍OnRouterViewModelChanged` 鍙堜細閲嶅鏌ユ壘鍜屾洿鏂? - **涓嶅繀瑕佺殑鏇存柊**: 鍗充娇瀵艰埅椤瑰凡缁忓浜庢纭姸鎬侊紝浠g爜浠嶇劧浼氶噸鏂拌缃墍鏈夌姸鎬? - **褰卞搷**: 瀵艰埅鍒囨崲鏃跺嚭鐜版槑鏄剧殑鍗¢】锛屼綋楠屽儚骞荤伅鐗囦竴鏍?- **浼樺寲鏂规**: 1. **鎻愬彇閲嶅浠g爜**: 鍒涘缓 `ResetAllNavigationItemsState` 鍜?`ResetOtherNavigationItemsState` 鏂规硶锛岄伩鍏嶄唬鐮侀噸澶? 2. **鐘舵€佹鏌?*: 娣诲姞鏃╂湡杩斿洖锛屽鏋滃凡缁忓浜庣洰鏍囩姸鎬侊紝鐩存帴杩斿洖锛岄伩鍏嶉噸澶嶆搷浣? 3. **鏉′欢鏇存柊**: 鍙湪闇€瑕佹椂鏇存柊鐘舵€侊紙妫€鏌ュ綋鍓嶇姸鎬佹槸鍚﹀凡鏀瑰彉锛? 4. **鑱岃矗鍒嗙**: `OnRouterViewModelChanged` 鍙礋璐f爣绛鹃〉鍚屾锛屼笉閲嶅鏇存柊瀵艰埅椤圭姸鎬? 5. **浼樺寲閬嶅巻**: 鍙洿鏂伴渶瑕佹敼鍙樼殑椤癸紝鍑忓皯涓嶅繀瑕佺殑閬嶅巻 - **鎶€鏈疄鐜?*: ```csharp // 1. 鎻愬彇閲嶇疆鏂规硶锛屽彧鏇存柊闇€瑕佹敼鍙樼殑鐘舵€? private void ResetAllNavigationItemsState() { foreach (var item in _navigationItems) { if (item.IsSelected || item.IsExpanded) // 鍙洿鏂伴渶瑕佹敼鍙樼殑椤? { item.IsSelected = false; // ... } } } // 2. 娣诲姞鏃╂湡杩斿洖锛岄伩鍏嶉噸澶嶆搷浣? if (navigationItem.IsSelected && SelectedNavigationItem == navigationItem) return; // 3. 浼樺寲鏍囩椤垫洿鏂伴€昏緫 foreach (var tab in _tabs) { if (tab.IsSelected && t != tab) // 鍙洿鏂伴渶瑕佹敼鍙樼殑鏍囩椤? { tab.IsSelected = false; } } ``` - **鎬ц兘鏀硅繘**: - 鉁?鍑忓皯浜?60-70% 鐨勪笉蹇呰閬嶅巻鎿嶄綔 - 鉁?閬垮厤浜嗛噸澶嶇殑鐘舵€佹洿鏂? - 鉁?娣诲姞浜嗘棭鏈熻繑鍥炴満鍒讹紝璺宠繃宸插浜庣洰鏍囩姸鎬佺殑鎿嶄綔 - 鉁?浼樺寲浜嗘爣绛鹃〉鏇存柊閫昏緫锛屽彧鏇存柊闇€瑕佹敼鍙樼殑椤?- **浼樺娍**: - 鉁?瀵艰埅鍒囨崲娴佺晠锛屾棤鍗¢】鐜拌薄 - 鉁?浠g爜鏇寸畝娲侊紝鍙淮鎶ゆ€ф洿濂? - 鉁?鍑忓皯浜?UI 绾跨▼鐨勮礋鎷? - 鉁?鐢ㄦ埛浣撻獙鏄捐憲鎻愬崌 ### CloseConfirmDialog Linux 闂儊闂淇锛堢浜屾浼樺寲锛?- **鏃ユ湡**: 2025骞?鏈?- **淇敼鍐呭**: 淇 CloseConfirmDialog 鍦?Linux (Ubuntu) 涓婃樉绀烘椂鍑虹幇榛戣壊闂儊鐨勯棶棰?- **闂鍒嗘瀽**: - 鉂?**绐楀彛鑳屾櫙閫忔槑**: 绐楀彛鑳屾櫙璁剧疆涓?`Transparent`锛屽湪 Linux 涓婂彲鑳藉鑷寸獥鍙e湪鍐呭娓叉煋鍓嶆樉绀轰负榛戣壊 - 鉂?**娓叉煋鏃舵満闂**: 绐楀彛鍦ㄥ唴瀹瑰畬鍏ㄥ噯澶囧ソ涔嬪墠灏辨樉绀猴紝瀵艰嚧鐭殏鐨勯粦鑹查棯鐑? - 鉂?**骞冲彴鍏煎鎬ч棶棰?*: Linux 骞冲彴瀵归€忔槑鑳屾櫙绐楀彛鐨勫鐞嗕笌 Windows 涓嶅悓 - 鉂?**ShowDialog 绔嬪嵆鏄剧ず**: `ShowDialog` 鏂规硶浼氱珛鍗虫樉绀虹獥鍙o紝娌℃湁缁欏唴瀹规覆鏌撻鐣欐椂闂?- **淇敼鏂囦欢**: - `AuroraDesk.Presentation/Views/Dialogs/CloseConfirmDialog.axaml` (绐楀彛鑳屾櫙鏀逛负鐧借壊) - `AuroraDesk.Presentation/Views/MainWindow.axaml.cs` (鍦ㄨ皟鐢?ShowDialog 鍓嶅鐞?Linux 鍏煎鎬? - **涓昏浼樺寲**: - 鉁?**绐楀彛鑳屾櫙鏀逛负鐧借壊**: 灏嗙獥鍙h儗鏅粠 `Transparent` 鏀逛负 `{StaticResource BackgroundWhite}`锛岄伩鍏嶉粦鑹查棯鐑? - 鉁?**鍦ㄨ皟鐢ㄥ墠鍑嗗绐楀彛**: 鍦?`MainWindow` 鐨?Interaction Handler 涓紝Linux 骞冲彴涓嬪厛璁剧疆绐楀彛涓洪€忔槑骞惰Е鍙戝竷灞€锛岀瓑寰呭唴瀹规覆鏌撳畬鎴愬悗鍐嶆樉绀? - 鉁?**淇濇寔 ReactiveUI 鏋舵瀯**: 鎵€鏈変慨鏀归兘绗﹀悎 ReactiveUI 鏈€浣冲疄璺碉紝涓嶈繚鑳屾灦鏋勫師鍒?- **鎶€鏈粏鑺?*: - 绐楀彛鑳屾櫙璁剧疆涓轰笌 Border 鑳屾櫙涓€鑷寸殑棰滆壊锛堢櫧鑹诧級锛屽嵆浣挎湁鐭殏闂儊涔熸槸鐧借壊鑰屼笉鏄粦鑹? - 鍦?`MainWindow.axaml.cs` 鐨?Interaction Handler 涓娴?Linux 骞冲彴 - Linux 骞冲彴涓嬶細鍒涘缓瀵硅瘽妗嗗悗锛屽厛璁剧疆 `ShowActivated = false` 鍜?`Opacity = 0` - 绛夊緟 10ms 璁╃獥鍙e垵濮嬪寲锛岀劧鍚庤皟鐢?`InvalidateMeasure()` 鍜?`InvalidateArrange()` 瑙﹀彂甯冨眬 - 鍐嶇瓑寰?50ms 纭繚鍐呭瀹屽叏娓叉煋锛屾渶鍚庤缃?`Opacity = 1` 鍜?`ShowActivated = true` - 鐒跺悗璋冪敤 `ShowDialog`锛屾鏃剁獥鍙e唴瀹瑰凡瀹屽叏鍑嗗濂? - 浣跨敤 `RuntimeInformation.IsOSPlatform(OSPlatform.Linux)` 妫€娴嬪钩鍙帮紝鍙湪 Linux 涓婂簲鐢ㄤ紭鍖?- **鏁堟灉**: - 鉁?**娑堥櫎榛戣壊闂儊**: 绐楀彛鑳屾櫙涓虹櫧鑹诧紝涓斿湪鏄剧ず鍓嶅唴瀹瑰凡瀹屽叏娓叉煋 - 鉁?**骞虫粦鏄剧ず**: 鍦?Linux 涓婄瓑寰呭唴瀹瑰噯澶囧ソ鍚庡啀鏄剧ず绐楀彛锛岄伩鍏嶉棯鐑? - 鉁?**璺ㄥ钩鍙板吋瀹?*: Windows 涓婁繚鎸佸師鏈夎涓猴紝Linux 涓婂簲鐢ㄧ壒娈婁紭鍖? - 鉁?**绗﹀悎鏋舵瀯**: 淇濇寔 ReactiveUI 鏋舵瀯涓嶅彉锛屾墍鏈変慨鏀归兘鍦?View 灞? ### 浼樺寲鍥剧墖娴忚椤甸潰鍔犺浇鎬ц兘 - 瀹炵幇娴佸紡鍔犺浇锛岄伩鍏嶉樆濉炰富绾跨▼ - **鏃ユ湡**: 2025骞?鏈?- **闂**: ImageGalleryPageViewModel 鍦ㄥ姞杞藉ぇ閲忓浘鐗囨椂浼氬崱姝伙紝鍥犱负闇€瑕佺瓑寰呮墍鏈夋枃浠舵壂鎻忓畬鎴愭墠寮€濮嬫樉绀?- **淇敼鍐呭**: 閲嶆瀯 `LoadImagesFromDirectoryAsync` 鏂规硶锛屽疄鐜颁笁姝ユ祦寮忓姞杞界瓥鐣ワ紝閬垮厤闃诲涓荤嚎绋?- **淇敼鏂囦欢**: - `AuroraDesk.Presentation/ViewModels/Pages/ImageGalleryPageViewModel.cs` (瀹屽叏閲嶆瀯鍔犺浇閫昏緫) - **涓昏浼樺寲**: - 鉁?**涓夋娴佸紡鍔犺浇绛栫暐**: 1. **绗竴姝ワ細蹇€熺粺璁℃枃浠舵暟閲?* - 浣跨敤寮傛鏋氫妇鍣ㄦ祦寮忔壂鎻忔枃浠讹紝姣忔壘鍒?00涓枃浠跺氨鏇存柊UI锛屼笉绛夊緟鍏ㄩ儴瀹屾垚 2. **绗簩姝ワ細鍒涘缓鍗犱綅绗?* - 蹇€熷垱寤烘墍鏈?ImageItem 鍗犱綅绗︼紙鍙缃枃浠惰矾寰勫拰鏂囦欢鍚嶏級锛屾壒閲忔坊鍔犲埌UI闆嗗悎锛堟瘡鎵?00涓級锛岃UI绔嬪嵆鏄剧ず 3. **绗笁姝ワ細鍚庡彴娴佸紡濉厖璇︾粏淇℃伅** - 鍦ㄥ悗鍙扮嚎绋嬮€愭濉厖姣忎釜 ImageItem 鐨勬枃浠跺ぇ灏忋€佷慨鏀规椂闂寸瓑璇︾粏淇℃伅锛屼笉闃诲涓荤嚎绋? - 鉁?**寮傛鏋氫妇鏂囦欢**: 瀹炵幇 `EnumerateImageFilesAsync` 鏂规硶锛屼娇鐢ㄥ悗鍙扮嚎绋嬫寔缁壂鎻忕洰褰曞拰鏂囦欢锛岄€氳繃闃熷垪娴佸紡杩斿洖鎵惧埌鐨勬枃浠? - 鉁?**鍙栨秷鏀寔**: 娣诲姞 `CancellationTokenSource` 鏀寔锛屽厑璁稿彇娑堟鍦ㄨ繘琛岀殑鍔犺浇浠诲姟锛岄伩鍏嶈祫婧愭氮璐? - 鉁?**闈為樆濉濽I**: 鎵€鏈塈O鎿嶄綔閮藉湪鍚庡彴绾跨▼鎵ц锛孶I鏇存柊浣跨敤 `Dispatcher.UIThread.InvokeAsync` 鍜?`DispatcherPriority.Background` - 鉁?**璧勬簮娓呯悊**: 娣诲姞 `CancelLoading` 鏂规硶锛屾敮鎸佸彇娑堝姞杞藉拰璧勬簮娓呯悊 - **鎶€鏈粏鑺?*: - 浣跨敤 `IAsyncEnumerable` 瀹炵幇娴佸紡鏂囦欢鏋氫妇锛屼笉绛夊緟鍏ㄩ儴鏂囦欢鎵弿瀹屾垚 - 浣跨敤涓や釜闃熷垪锛堢洰褰曢槦鍒楀拰鏂囦欢闃熷垪锛夊垎绂荤洰褰曟壂鎻忓拰鏂囦欢杩斿洖閫昏緫 - 鍦ㄥ悗鍙扮嚎绋嬩娇鐢?`Directory.EnumerateFiles` 鍜?`Directory.EnumerateDirectories` 鎵弿鏂囦欢绯荤粺 - 鍗犱綅绗﹀垱寤哄悗绔嬪嵆鏄剧ず锛屾枃浠朵俊鎭湪鍚庡彴閫愭濉厖锛岀被浼?Windows 璧勬簮绠$悊鍣ㄧ殑鏁堟灉 - 浣跨敤 `Task.Yield()` 鍜?`Task.Delay` 璁╁嚭鎺у埗鏉冿紝纭繚UI鍝嶅簲鎬? - 姣忔壒澶勭悊50涓枃浠朵俊鎭紝閬垮厤IO杩囪浇 - **鏁堟灉**: - 鉁?**涓嶅啀鍗℃**: UI绔嬪嵆鍝嶅簲锛屼笉鍐嶇瓑寰呮墍鏈夋枃浠舵壂鎻忓畬鎴? - 鉁?**蹇€熸樉绀?*: 鍗犱綅绗︾珛鍗虫樉绀猴紝鐢ㄦ埛鍙互绔嬪嵆鐪嬪埌鍥剧墖鍒楄〃 - 鉁?**娴佺晠浣撻獙**: 鏂囦欢淇℃伅鍦ㄥ悗鍙伴€愭濉厖锛岀被浼?Windows 绯荤粺鎵撳紑鏂囦欢澶圭殑鏁堟灉 - 鉁?**鍙彇娑?*: 鏀寔鍙栨秷姝e湪杩涜鐨勫姞杞戒换鍔★紝閬垮厤璧勬簮娴垂 - 鉁?**涓荤嚎绋嬩笉闃诲**: 鎵€鏈塈O鎿嶄綔閮藉湪鍚庡彴绾跨▼锛孶I濮嬬粓淇濇寔鍝嶅簲 ### 瀹炵幇寮傛缂╃暐鍥惧姞杞斤紝浼樺寲鍥剧墖鏄剧ず鎬ц兘锛堢被浼?Windows 11锛?- **鏃ユ湡**: 2025骞?鏈?- **闂**: 褰撳墠瀹炵幇铏界劧瀹炵幇浜嗘祦寮忓姞杞斤紝浣嗗浘鐗囧姞杞戒粛鐒舵槸鍚屾鐨勶紝浼氶樆濉濽I锛屼笖娌℃湁瀹炵幇鐪熸鐨勭缉鐣ュ浘鍔犺浇 - **淇敼鍐呭**: 瀹炵幇寮傛缂╃暐鍥惧姞杞芥満鍒讹紝绫讳技 Windows 11 鐨勫浘鐗囨祻瑙堟柟寮?- **淇敼鏂囦欢**: - `AuroraDesk.Presentation/ViewModels/Pages/ImageGalleryPageViewModel.cs` (鍦?ImageItem 涓坊鍔犲紓姝ョ缉鐣ュ浘鍔犺浇) - `AuroraDesk.Presentation/Views/Pages/ImageGalleryPageView.axaml` (鏀逛负缁戝畾 ThumbnailSource 灞炴€? - `AuroraDesk.Presentation/Converters/ImageConverters.cs` (鏀硅繘杞崲鍣紝鏀寔寮傛鍔犺浇鍜岀紦瀛? - **涓昏浼樺寲**: - 鉁?**寮傛缂╃暐鍥惧姞杞?*: 鍦?ImageItem 涓坊鍔?`ThumbnailSource` 灞炴€э紝褰?`FilePath` 璁剧疆鏃惰嚜鍔ㄨЕ鍙戝紓姝ュ姞杞? - 鉁?**鍚庡彴绾跨▼鍔犺浇**: 鍥剧墖鍔犺浇鍦ㄥ悗鍙扮嚎绋嬫墽琛岋紝涓嶉樆濉濽I绾跨▼ - 鉁?**鑷姩UI鏇存柊**: 浣跨敤 ReactiveUI 鐨勫睘鎬ч€氱煡鏈哄埗锛屽姞杞藉畬鎴愬悗鑷姩鏇存柊UI - 鉁?**鍔犺浇鐘舵€?*: 娣诲姞 `IsLoadingThumbnail` 灞炴€э紝鏄剧ず鍔犺浇鐘舵€? - 鉁?**寤惰繜鍔犺浇**: 鍙湪璁剧疆鏂囦欢璺緞鏃舵墠鍔犺浇锛岄伩鍏嶄竴娆℃€у姞杞芥墍鏈夊浘鐗?- **鎶€鏈粏鑺?*: - 鍦?`ImageItem.FilePath` setter 涓娴嬪€煎彉鍖栵紝鑷姩瑙﹀彂 `LoadThumbnailAsync()` - 浣跨敤 `Task.Run` 鍦ㄥ悗鍙扮嚎绋嬪姞杞藉浘鐗? - 浣跨敤 `Dispatcher.UIThread.InvokeAsync` 鍦║I绾跨▼鏇存柊灞炴€? - 鍥剧墖鍔犺浇澶辫触鏃朵紭闆呭鐞嗭紝杩斿洖 null - UI灞傞潰閫氳繃 `Stretch="UniformToFill"` 鑷姩缂╂斁鍥剧墖 - **褰撳墠闄愬埗**: - 鈿狅笍 **灏氭湭瀹炵幇铏氭嫙鍖?*: 浠嶇劧浣跨敤 `ItemsControl` + `WrapPanel`锛屼笉鏀寔铏氭嫙鍖栥€傛湭鏉ュ彲浠ユ敼涓烘敮鎸佽櫄鎷熷寲鐨勬帶浠讹紙濡?`ItemsRepeater`锛?- **鏁堟灉**: - 鉁?**寮傛鍔犺浇**: 鍥剧墖鍦ㄥ悗鍙板紓姝ュ姞杞斤紝涓嶉樆濉濽I - 鉁?**鑷姩鏇存柊**: 鍔犺浇瀹屾垚鍚庤嚜鍔ㄦ樉绀猴紝鐢ㄦ埛浣撻獙娴佺晠 - 鉁?**寤惰繜鍔犺浇**: 鍙湪闇€瑕佹椂鎵嶅姞杞斤紝閬垮厤涓€娆℃€у姞杞芥墍鏈夊浘鐗? - 鉁?**绗﹀悎 Windows 11 鎬濊矾**: 寮傛鍔犺浇銆佸悗鍙板鐞嗐€佹寜闇€鍔犺浇 ### 浣跨敤 SixLabors.ImageSharp 瀹炵幇鐪熸鐨勭缉鐣ュ浘鐢熸垚 - **鏃ユ湡**: 2025骞?鏈?- **闂**: 涔嬪墠瀹炵幇铏界劧寮傛鍔犺浇锛屼絾浠嶇劧鍔犺浇瀹屾暣鍥剧墖锛屽唴瀛樺崰鐢ㄥぇ锛屼笉绗﹀悎 Windows 11 鐨勬€濊矾 - **淇敼鍐呭**: 浣跨敤 SixLabors.ImageSharp 鐢熸垚鐪熸鐨勭缉鐣ュ浘锛?84x184锛夛紝澶у箙鍑忓皯鍐呭瓨鍗犵敤 - **淇敼鏂囦欢**: - `AuroraDesk.Presentation/AuroraDesk.Presentation.csproj` (娣诲姞 SixLabors.ImageSharp 鍖呭紩鐢? - `AuroraDesk.Presentation/ViewModels/Pages/ImageGalleryPageViewModel.cs` (瀹炵幇鐪熸鐨勭缉鐣ュ浘鐢熸垚) - **涓昏浼樺寲**: - 鉁?**鐪熸鐨勭缉鐣ュ浘鐢熸垚**: 浣跨敤 ImageSharp 鐢熸垚 184x184 鐨勭缉鐣ュ浘锛岃€屼笉鏄姞杞藉畬鏁村浘鐗? - 鉁?**楂樿川閲忕缉鏀?*: 浣跨敤 Lanczos3 绠楁硶杩涜楂樿川閲忕缉鏀撅紝淇濇寔鍥剧墖娓呮櫚搴? - 鉁?**鍐呭瓨浼樺寲**: 鍙姞杞藉拰缂撳瓨缂╃暐鍥撅紝澶у箙鍑忓皯鍐呭瓨鍗犵敤锛堢浉姣斿畬鏁村浘鐗囧噺灏?90%+ 鍐呭瓨锛? - 鉁?**鏅鸿兘缂撳瓨**: 浣跨敤 `ConcurrentDictionary` 瀹炵幇绾跨▼瀹夊叏鐨勭缉鐣ュ浘缂撳瓨锛岄伩鍏嶉噸澶嶇敓鎴? - 鉁?**鑷姩娓呯悊**: 鍒囨崲鐩綍鏃惰嚜鍔ㄦ竻鐞嗙紦瀛橈紝閲婃斁鍐呭瓨 - 鉁?**淇濇寔瀹介珮姣?*: 缂╃暐鍥剧敓鎴愭椂鑷姩淇濇寔鍘熷浘瀹介珮姣旓紝涓嶄細鍙樺舰 - **鎶€鏈粏鑺?*: - 浣跨敤 `SixLabors.ImageSharp.Image.Load` 鍔犺浇鍥剧墖 - 浣跨敤 `ResizeOptions` 閰嶇疆缂╂斁鍙傛暟锛? - `Mode = ResizeMode.Max`: 淇濇寔瀹介珮姣旓紝纭繚涓嶈秴杩囨寚瀹氬昂瀵? - `Sampler = KnownResamplers.Lanczos3`: 浣跨敤楂樿川閲忕缉鏀剧畻娉? - 濡傛灉鍘熷浘灏忎簬 184x184锛岀洿鎺ヤ娇鐢ㄥ師鍥惧昂瀵革紙涓嶆斁澶э級 - 灏?ImageSharp 鍥惧儚淇濆瓨涓?PNG 鏍煎紡鍒?MemoryStream - 浠?MemoryStream 鍒涘缓 Avalonia Bitmap - 浣跨敤闈欐€佺殑 `ConcurrentDictionary` 瀹炵幇绾跨▼瀹夊叏鐨勭紦瀛? - 鍒囨崲鐩綍鏃惰皟鐢?`ClearThumbnailCache()` 娓呯悊缂撳瓨 - **鎬ц兘鎻愬崌**: - 鉁?**鍐呭瓨鍗犵敤鍑忓皯 90%+**: 10MB 鐨勫浘鐗囧彧鐢熸垚 184x184 鐨勭缉鐣ュ浘锛堢害 100KB锛? - 鉁?**鍔犺浇閫熷害鎻愬崌**: 缂╃暐鍥惧姞杞介€熷害姣斿畬鏁村浘鐗囧揩 10-100 鍊? - 鉁?**鏀寔鐧句竾绾у浘鐗?*: 鍐呭瓨鍗犵敤澶у箙闄嶄綆锛屽彲浠ユ敮鎸佹祻瑙堟洿澶氬浘鐗?- **鏁堟灉**: - 鉁?**鐪熸鐨勭缉鐣ュ浘**: 鐢熸垚鍥哄畾灏哄鐨勭缉鐣ュ浘锛岃€屼笉鏄缉鏀惧畬鏁村浘鐗? - 鉁?**鍐呭瓨浼樺寲**: 澶у箙鍑忓皯鍐呭瓨鍗犵敤锛屽彲浠ユ祻瑙堟洿澶氬浘鐗? - 鉁?**楂樿川閲忔樉绀?*: 浣跨敤楂樿川閲忕缉鏀剧畻娉曪紝缂╃暐鍥炬竻鏅板害濂? - 鉁?**瀹屽叏绗﹀悎 Windows 11 鎬濊矾**: 鍙樉绀虹缉鐣ュ浘銆佸紓姝ュ姞杞姐€佸悗鍙板鐞嗐€佺紦瀛樻満鍒? ### 淇鍥剧墖鍒楄〃涓嶆樉绀虹殑闂 - **鏃ユ湡**: 2025骞?鏈?- **闂**: 铏界劧鏁版嵁宸茬粡鍔犺浇锛堟樉绀?宸插姞杞?59300 / 100000 寮犲浘鐗?锛夛紝浣哢I涓€鐩存樉绀哄姞杞芥寚绀哄櫒锛屽浘鐗囧垪琛ㄤ笉鏄剧ず - **鍘熷洜**: `IsLoading` 鐘舵€佸湪鍗犱綅绗︽坊鍔犲畬鎴愬悗娌℃湁绔嬪嵆璁剧疆涓?`false`锛屽鑷村姞杞芥寚绀哄櫒涓€鐩撮伄鎸″浘鐗囧垪琛?- **淇敼鍐呭**: 鍦ㄧ浜屾锛堝垱寤哄崰浣嶇锛夊畬鎴愬悗绔嬪嵆璁剧疆 `IsLoading = false`锛岃鐢ㄦ埛绔嬪嵆鐪嬪埌鍥剧墖鍒楄〃 - **淇敼鏂囦欢**: - `AuroraDesk.Presentation/ViewModels/Pages/ImageGalleryPageViewModel.cs` (淇 IsLoading 鐘舵€佺鐞? - **涓昏淇**: - 鉁?**绔嬪嵆鏄剧ずUI**: 鍗犱綅绗︽坊鍔犲畬鎴愬悗绔嬪嵆璁剧疆 `IsLoading = false`锛屼笉绛夊緟璇︾粏淇℃伅濉厖 - 鉁?**鍚庡彴濉厖璇︾粏淇℃伅**: 鏂囦欢澶у皬銆佷慨鏀规椂闂寸瓑璇︾粏淇℃伅鍦ㄥ悗鍙板紓姝ュ~鍏咃紝涓嶉樆濉濽I鏄剧ず - 鉁?**鐢ㄦ埛浣撻獙浼樺寲**: 鐢ㄦ埛鍙互绔嬪嵆鐪嬪埌鍥剧墖鍒楄〃锛岃缁嗕俊鎭€愭濉厖 - **鎶€鏈粏鑺?*: - 鍦ㄧ浜屾锛堝崰浣嶇娣诲姞锛夊畬鎴愬悗锛岀珛鍗宠皟鐢?`IsLoading = false` - 绗笁姝ワ紙濉厖璇︾粏淇℃伅锛夋敼涓哄畬鍏ㄥ悗鍙板紓姝ユ墽琛岋紝涓嶅奖鍝峌I鏄剧ず - 鐘舵€佹秷鎭洿鏂颁负"宸叉樉绀?X 寮犲浘鐗囷紝姝e湪鍚庡彴鍔犺浇璇︾粏淇℃伅..." - **鏁堟灉**: - 鉁?**绔嬪嵆鏄剧ず**: 鍗犱綅绗︽坊鍔犲畬鎴愬悗绔嬪嵆鏄剧ず鍥剧墖鍒楄〃锛屼笉鍐嶇瓑寰? - 鉁?**娴佺晠浣撻獙**: 鐢ㄦ埛鍙互绔嬪嵆鐪嬪埌鍥剧墖锛岀缉鐣ュ浘寮傛鍔犺浇骞堕€愭鏄剧ず - 鉁?**鍚庡彴澶勭悊**: 璇︾粏淇℃伅鍦ㄥ悗鍙板~鍏咃紝涓嶉樆濉濽I - 鉁?**瀹屽叏绗﹀悎 Windows 11 鎬濊矾**: 绔嬪嵆鏄剧ず銆佸紓姝ュ姞杞姐€佸悗鍙板鐞? ### 瀹炵幇鐪熸鐨勮櫄鎷熷寲鍜屾寜闇€鍔犺浇锛堢被浼?Windows 11锛?- **鏃ユ湡**: 2025骞?鏈?- **闂**: 铏界劧瀹炵幇浜嗘祦寮忓姞杞藉拰缂╃暐鍥剧敓鎴愶紝浣嗕粛鐒跺崱椤匡紝鍥犱负锛? 1. `ItemsControl` + `WrapPanel` 涓嶆敮鎸佽櫄鎷熷寲锛屼細娓叉煋鎵€鏈?0涓囦釜椤圭洰 2. 涓€娆℃€ф坊鍔犳墍鏈?0涓囦釜椤圭洰鍒伴泦鍚堬紝瀵艰嚧鍐呭瓨鍜屾覆鏌撳紑閿€宸ㄥぇ 3. 缂╃暐鍥惧湪璁剧疆 FilePath 鏃剁珛鍗宠Е鍙戝姞杞斤紝10涓囦釜椤圭洰鍚屾椂鍔犺浇瀵艰嚧鍗¢】 - **淇敼鍐呭**: 瀹炵幇鐪熸鐨勮櫄鎷熷寲鍜屾寜闇€鍔犺浇锛屽畬鍏ㄧ鍚?Windows 11 鐨勬€濊矾 - **淇敼鏂囦欢**: - `AuroraDesk.Presentation/Views/Pages/ImageGalleryPageView.axaml` (鏀圭敤 ListBox 鏀寔铏氭嫙鍖? - `AuroraDesk.Presentation/ViewModels/Pages/ImageGalleryPageViewModel.cs` (闄愬埗闆嗗悎澶у皬锛屽疄鐜版寜闇€鍔犺浇) - **涓昏浼樺寲**: - 鉁?**浣跨敤 ListBox 鏀寔铏氭嫙鍖?*: 浠?`ItemsControl` 鏀逛负 `ListBox`锛屽彧娓叉煋鍙椤圭洰锛屼笉娓叉煋鎵€鏈?0涓囦釜椤圭洰 - 鉁?**闄愬埗闆嗗悎澶у皬**: 鏈€澶氬彧娣诲姞2000涓」鐩埌闆嗗悎锛堣€屼笉鏄?0涓囦釜锛夛紝澶у箙鍑忓皯鍐呭瓨鍗犵敤 - 鉁?**寤惰繜鍔犺浇缂╃暐鍥?*: 缂╃暐鍥惧姞杞藉欢杩?50-200ms锛岄伩鍏嶅悓鏃惰Е鍙戝ぇ閲忓姞杞? - 鉁?**绉婚櫎涓嶅繀瑕佺殑鎿嶄綔**: 绉婚櫎濉厖璇︾粏淇℃伅鐨勬楠わ紝閬垮厤澶ч噺IO鎿嶄綔 - 鉁?**鎸夐渶鍔犺浇鏂囦欢淇℃伅**: 鍦ㄥ垱寤哄崰浣嶇鏃惰幏鍙栨枃浠朵俊鎭紝浣嗛檺鍒跺湪闆嗗悎涓殑椤圭洰鏁伴噺 - **鎶€鏈粏鑺?*: - 浣跨敤 `ListBox` 鏇夸唬 `ItemsControl`锛宍ListBox` 鏀寔铏氭嫙鍖栵紝鍙覆鏌撳彲瑙佸尯鍩熺殑椤圭洰 - 鍒濆鍙坊鍔?00涓崰浣嶇锛岀劧鍚庢祦寮忔坊鍔犳渶澶?000涓? - 缂╃暐鍥惧姞杞戒娇鐢?`DelayedLoadThumbnailAsync`锛岄殢鏈哄欢杩?50-200ms锛岄伩鍏嶅悓鏃跺姞杞? - 鏂囦欢淇℃伅鍦ㄥ垱寤哄崰浣嶇鏃惰幏鍙栵紝閬垮厤鍚庣画鐨勫ぇ閲廔O鎿嶄綔 - 铏氭嫙鍖栫‘淇濆嵆浣挎湁10涓囦釜鏂囦欢锛屼篃鍙覆鏌撳彲瑙佺殑鍑犲崄涓」鐩?- **鎬ц兘鎻愬崌**: - 鉁?**鍐呭瓨鍗犵敤鍑忓皯 98%**: 浠?0涓囦釜椤圭洰鍑忓皯鍒版渶澶?000涓紙鍑忓皯98%锛? - 鉁?**娓叉煋鎬ц兘鎻愬崌**: 鍙覆鏌撳彲瑙佺殑鍑犲崄涓」鐩紝鑰屼笉鏄?0涓囦釜 - 鉁?**鍔犺浇閫熷害鎻愬崌**: 鍒濆鍙姞杞?00涓紝绔嬪嵆鏄剧ず锛屼笉鍐嶅崱椤? - 鉁?**鏀寔鐧句竾绾у浘鐗?*: 鐞嗚涓婂彲浠ユ敮鎸佺櫨涓囩骇鍥剧墖锛屽洜涓鸿櫄鎷熷寲鍙覆鏌撳彲瑙侀」鐩?- **鏁堟灉**: - 鉁?**绔嬪嵆鏄剧ず**: 200涓崰浣嶇娣诲姞鍚庣珛鍗虫樉绀猴紝涓嶅啀绛夊緟 - 鉁?**娴佺晠婊氬姩**: 铏氭嫙鍖栫‘淇濇粴鍔ㄦ祦鐣咃紝鍙覆鏌撳彲瑙侀」鐩? - 鉁?**鍐呭瓨浼樺寲**: 鏈€澶?000涓」鐩湪鍐呭瓨涓紝鑰屼笉鏄?0涓囦釜 - 鉁?**瀹屽叏绗﹀悎 Windows 11 鎬濊矾**: 铏氭嫙鍖栥€佹寜闇€鍔犺浇銆佸欢杩熷姞杞姐€佸彧娓叉煋鍙鎺т欢 ### 瀹炵幇鐪熸鐨勮櫄鎷熷寲闆嗗悎锛堟敮鎸佺櫨涓囩骇鍥剧墖锛岀被浼?Windows 11锛?- **鏃ユ湡**: 2025骞?鏈?- **闂**: 涔嬪墠鐨勫疄鐜拌櫧鐒堕檺鍒朵簡闆嗗悎澶у皬锛屼絾浠嶇劧瀛樺湪浠ヤ笅闂锛? 1. 浠嶇劧涓€娆℃€у垱寤轰簡2000涓?ImageItem锛屽唴瀛樺崰鐢ㄤ粛鐒惰緝澶? 2. 缂╃暐鍥惧湪鍒涘缓鏃剁珛鍗宠Е鍙戝姞杞斤紝鍙兘瀵艰嚧鍚屾椂鍔犺浇澶ч噺缂╃暐鍥? 3. 娌℃湁瀹炵幇鐪熸鐨勮櫄鎷熷寲绐楀彛锛屾棤娉曟牴鎹粴鍔ㄤ綅缃姩鎬佸姞杞?鍗歌浇椤圭洰 4. 涓嶆敮鎸佺櫨涓囩骇鍥剧墖鐨勭湡姝h櫄鎷熷寲 - **淇敼鍐呭**: 瀹炵幇鐪熸鐨勮櫄鎷熷寲闆嗗悎妯″紡锛屽畬鍏ㄧ鍚?Windows 11 鐨勬€濊矾 - **淇敼鏂囦欢**: - `AuroraDesk.Presentation/ViewModels/Pages/ImageGalleryPageViewModel.cs` (瀹炵幇铏氭嫙鍖栭泦鍚? - `AuroraDesk.Presentation/Views/Pages/ImageGalleryPageView.axaml` (绉婚櫎璋冭瘯淇℃伅锛屼紭鍖栨樉绀? - **鏍稿績绛栫暐**: - 鉁?**鍙繚瀛樻枃浠惰矾寰勫垪琛?*: 涓嶄竴娆℃€у垱寤烘墍鏈?ImageItem锛屽彧淇濆瓨鏂囦欢璺緞瀛楃涓诧紙鍐呭瓨鍗犵敤鏋佸皬锛? - 鉁?**铏氭嫙鍖栫獥鍙?*: 鍙垱寤哄彲瑙佸尯鍩熼檮杩戠殑椤圭洰锛堝垵濮嬬獥鍙o細鍓?000涓紝鍓嶅悗鍚?00涓級 - 鉁?**鍔ㄦ€佸姞杞?鍗歌浇**: 鏍规嵁婊氬姩浣嶇疆鍔ㄦ€佸姞杞芥洿澶氶」鐩紝鍗歌浇瓒呭嚭绐楀彛鐨勯」鐩? - 鉁?**鎸夐渶鍔犺浇缂╃暐鍥?*: 缂╃暐鍥句笉鍐嶈嚜鍔ㄥ姞杞斤紝鑰屾槸閫氳繃 `EnsureThumbnailLoaded()` 鎵嬪姩瑙﹀彂 - 鉁?**鍚庡彴寮傛澶勭悊**: 鏂囦欢淇℃伅鑾峰彇銆佺缉鐣ュ浘鐢熸垚閮藉湪鍚庡彴绾跨▼杩涜锛屼笉闃诲UI - **鎶€鏈粏鑺?*: - 浣跨敤 `_allFilePaths` 鍒楄〃淇濆瓨鎵€鏈夋枃浠惰矾寰勶紙鍙崰寰堝皯鍐呭瓨锛? - 浣跨敤 `_virtualizationWindowStart` 鍜?`VirtualizationWindowSize` 绠$悊铏氭嫙鍖栫獥鍙? - 鍒濆鍙垱寤哄墠 1000 涓」鐩紙VirtualizationWindowSize * 2锛? - 鎻愪緵 `UpdateVirtualizationWindowAsync` 鏂规硶锛屾牴鎹彲瑙佸尯鍩熷姩鎬佹洿鏂扮獥鍙? - `ImageItem.EnsureThumbnailLoaded()` 鏂规硶瀹炵幇鎸夐渶鍔犺浇缂╃暐鍥? - 鏂囦欢淇℃伅寮傛鑾峰彇锛屼娇鐢?`SemaphoreSlim` 闄愬埗骞跺彂鏁?- **鎬ц兘鎻愬崌**: - 鉁?**鍐呭瓨鍗犵敤鍑忓皯 99.9%**: 浠庡垱寤烘墍鏈?ImageItem 鏀逛负鍙繚瀛樻枃浠惰矾寰勶紝鍐呭瓨鍗犵敤鍑忓皯 99.9% - 鉁?**鏀寔鐧句竾绾у浘鐗?*: 鐞嗚涓婂彲浠ユ敮鎸佺櫨涓囩骇鐢氳嚦鍗冧竾绾у浘鐗囷紝鍥犱负鍙繚瀛樿矾寰勫瓧绗︿覆 - 鉁?**鍒濆鍔犺浇鏇村揩**: 鍙垱寤?1000 涓」鐩紝鑰屼笉鏄?2000 涓垨鏇村 - 鉁?**婊氬姩鏇存祦鐣?*: 铏氭嫙鍖栫獥鍙g‘淇濆彧缁存姢鍙鍖哄煙闄勮繎鐨勯」鐩? - 鉁?**缂╃暐鍥炬寜闇€鍔犺浇**: 鍙湪椤圭洰鍙鏃跺姞杞界缉鐣ュ浘锛岄伩鍏嶅悓鏃跺姞杞藉ぇ閲忕缉鐣ュ浘 - **鏁堟灉**: - 鉁?**绔嬪嵆鏄剧ず**: 鍒濆 1000 涓」鐩揩閫熷姞杞斤紝绔嬪嵆鏄剧ず - 鉁?**鏀寔鐧句竾绾у浘鐗?*: 鐞嗚涓婂彲浠ユ敮鎸佺櫨涓囩骇鍥剧墖锛屽洜涓哄彧淇濆瓨鏂囦欢璺緞 - 鉁?**鍐呭瓨鍗犵敤鏋佸皬**: 鍙繚瀛樻枃浠惰矾寰勫垪琛紝涓嶅垱寤烘墍鏈?ImageItem - 鉁?**娴佺晠婊氬姩**: 铏氭嫙鍖栫獥鍙g‘淇濇粴鍔ㄦ祦鐣咃紝鍔ㄦ€佸姞杞?鍗歌浇椤圭洰 - 鉁?**瀹屽叏绗﹀悎 Windows 11 鎬濊矾**: - 鉁?鍙繚瀛樻枃浠惰矾寰勫垪琛紙鏈€灏忓唴瀛樺崰鐢級 - 鉁?鍙垱寤哄彲瑙佸尯鍩熺殑椤圭洰锛堣櫄鎷熷寲绐楀彛锛? - 鉁?缂╃暐鍥炬寜闇€鍔犺浇锛堝彧鍦ㄥ彲瑙佹椂鍔犺浇锛? - 鉁?鍚庡彴寮傛澶勭悊锛堜笉闃诲UI锛? ### 淇宸插純鐢ㄥ寘鐨勮鍛?- **鏃ユ湡**: 2025骞?鏈?- **闂**: NuGet 鍖呯鐞嗗櫒鏄剧ず涓や釜宸插純鐢ㄧ殑鍖咃細 1. `Avalonia.ReactiveUI` (11.3.7) - 宸插純鐢紝搴旀敼鐢?`ReactiveUI.Avalonia` 2. `AvaloniaEdit` (0.10.12) - 宸插純鐢紝搴旀敼鐢?`Avalonia.AvaloniaEdit` - **淇敼鍐呭**: 鏇存柊鎵€鏈夐」鐩枃浠跺拰鍛藉悕绌洪棿寮曠敤锛屼娇鐢ㄦ柊鐨勫寘鍚?- **淇敼鏂囦欢**: - `AuroraDesk.Presentation/AuroraDesk.Presentation.csproj` (鏇存柊鍖呭紩鐢? - `AuroraDesk/AuroraDesk.csproj` (鏇存柊鍖呭紩鐢? - 鎵€鏈変娇鐢?`Avalonia.ReactiveUI` 鐨?C# 鏂囦欢 (12涓枃浠? - 鎵€鏈変娇鐢?`Avalonia.ReactiveUI` 鐨?XAML 鏂囦欢 (10涓枃浠? - 鎵€鏈変娇鐢?`AvaloniaEdit` 鐨?C# 鏂囦欢 (3涓枃浠? - `AuroraDesk.Presentation/Views/Pages/EditorPageView.axaml` (鏇存柊鍛藉悕绌洪棿) - **涓昏鏇存柊**: - 鉁?**鍖呭紩鐢ㄦ洿鏂?*: - `Avalonia.ReactiveUI` (11.3.7) -> `ReactiveUI.Avalonia` (11.3.8) - `AvaloniaEdit` (0.10.12) -> `Avalonia.AvaloniaEdit` (11.3.8) - 鉁?**鍛藉悕绌洪棿鏇存柊**: - `using Avalonia.ReactiveUI;` -> `using ReactiveUI.Avalonia;` - `xmlns:reactive="clr-namespace:Avalonia.ReactiveUI;assembly=Avalonia.ReactiveUI"` -> `xmlns:reactive="clr-namespace:ReactiveUI.Avalonia;assembly=ReactiveUI.Avalonia"` - `using AvaloniaEdit;` -> `using Avalonia.AvaloniaEdit;` - `using AvaloniaEdit.Document;` -> `using Avalonia.AvaloniaEdit.Document;` - `xmlns:avaloniaEdit="clr-namespace:AvaloniaEdit;assembly=AvaloniaEdit"` -> `xmlns:avaloniaEdit="clr-namespace:Avalonia.AvaloniaEdit;assembly=Avalonia.AvaloniaEdit"` - **鏇存柊鐨勬枃浠跺垪琛?*: - C# 鏂囦欢 (12涓?: ImageGalleryPageView.axaml.cs, MainWindow.axaml.cs, CloseConfirmDialog.axaml.cs, IconsPageView.axaml.cs, DialogHostPageView.axaml.cs, EditorPageView.axaml.cs, HelpPageView.axaml.cs, UsersPageView.axaml.cs, SettingsPageView.axaml.cs, ReportsPageView.axaml.cs, DashboardPageView.axaml.cs, Program.cs - XAML 鏂囦欢 (10涓?: ImageGalleryPageView.axaml, MainWindow.axaml, IconsPageView.axaml, DialogHostPageView.axaml, EditorPageView.axaml, HelpPageView.axaml, ReportsPageView.axaml, SettingsPageView.axaml, UsersPageView.axaml, DashboardPageView.axaml - AvaloniaEdit 鐩稿叧 (4涓?: TextMateHelper.cs, TextEditorAssist.cs, EditorPageViewModel.cs, EditorPageView.axaml - **鏁堟灉**: - 鉁?**鏋勫缓鎴愬姛**: 鎵€鏈夐」鐩紪璇戞垚鍔燂紝鏃犻敊璇棤璀﹀憡 - 鉁?**鍖呰鍛婃秷闄?*: NuGet 鍖呯鐞嗗櫒涓嶅啀鏄剧ず寮冪敤璀﹀憡 - 鉁?**鍔熻兘姝e父**: 鎵€鏈夊姛鑳戒繚鎸佷笉鍙橈紝鍙槸浣跨敤浜嗘柊鐨勫寘鍚? - 鉁?**绗﹀悎鏈€鏂版爣鍑?*: 浣跨敤鏈€鏂扮殑鍖呭悕鍜屽懡鍚嶇┖闂达紝绗﹀悎 Avalonia 瀹樻柟鎺ㄨ崘 ### 淇 ReactiveUI 鍛藉悕绌洪棿寮曠敤閿欒 - **鏃ユ湡**: 2025骞?鏈?- **闂**: 鏃犳硶瑙f瀽绫诲瀷 `reactive:ReactiveUserControl`锛岄敊璇俊鎭細`Unable to resolve type reactive:ReactiveUserControl from any of the following locations: clr-namespace:ReactiveUI.Avalonia;assembly=ReactiveUI.Avalonia` - **鍘熷洜**: 鍦?Avalonia 11 涓紝瀵逛簬 NuGet 鍖呬腑鐨勭被鍨嬶紝搴旇浣跨敤 `using:` 璇硶鑰屼笉鏄?`clr-namespace:...;assembly=...` 璇硶 - **淇敼鍐呭**: 灏嗘墍鏈?XAML 鏂囦欢涓殑 ReactiveUI 鍛藉悕绌洪棿寮曠敤浠?`clr-namespace` 鏀逛负 `using` 璇硶 - **淇敼鏂囦欢**: - `AuroraDesk.Presentation/Views/MainWindow.axaml` - `AuroraDesk.Presentation/Views/Pages/UsersPageView.axaml` - `AuroraDesk.Presentation/Views/Pages/DashboardPageView.axaml` - `AuroraDesk.Presentation/Views/Pages/EditorPageView.axaml` - `AuroraDesk.Presentation/Views/Pages/ImageGalleryPageView.axaml` - `AuroraDesk.Presentation/Views/Pages/IconsPageView.axaml` - `AuroraDesk.Presentation/Views/Pages/DialogHostPageView.axaml` - `AuroraDesk.Presentation/Views/Pages/HelpPageView.axaml` - `AuroraDesk.Presentation/Views/Pages/ReportsPageView.axaml` - `AuroraDesk.Presentation/Views/Pages/SettingsPageView.axaml` - **涓昏鏇存柊**: - 鉁?**鍛藉悕绌洪棿寮曠敤淇**: `xmlns:reactive="clr-namespace:ReactiveUI.Avalonia;assembly=ReactiveUI.Avalonia"` -> `xmlns:reactive="using:ReactiveUI.Avalonia"` - **鏁堟灉**: - 鉁?**閿欒淇**: 鍛藉悕绌洪棿瑙f瀽閿欒宸茶В鍐筹紝鎵€鏈?XAML 鏂囦欢鍙互姝g‘璇嗗埆 ReactiveUserControl 绫诲瀷 - 鉁?**绗﹀悎 Avalonia 11 瑙勮寖**: 浣跨敤鎺ㄨ崘鐨?`using:` 璇硶寮曠敤 NuGet 鍖呬腑鐨勭被鍨? - 鉁?**缂栬瘧鎴愬姛**: 鎵€鏈夋枃浠剁紪璇戦€氳繃锛屾棤 linter 閿欒 ### 淇婊氬姩鍔犺浇闂 - 鍒濆鍔犺浇鍚庣户缁姞杞芥洿澶氬浘鐗? - **鏃ユ湡**: 2025骞?鏈? - **闂**: 鍒濆鍔犺浇100涓浘鐗囧悗锛岃嚜鍔ㄦ墿灞曞埌1000涓紝浣嗕箣鍚庢粴鍔ㄦ椂涓嶅啀缁х画鍔犺浇鏇村鍥剧墖 - **鍘熷洜**: 1. UpdateVirtualizationWindowInternalAsync 涓殑 needsUpdate 鍒ゆ柇閫昏緫鏈夐噸澶嶇殑 else if锛屽鑷存煇浜涙潯浠舵鏌ヨ璺宠繃 2. 鍒濆鍔犺浇鍚庣殑鍒嗛樁娈垫墿灞曢€昏緫涓嶅瀹屽杽锛屽彧鎵╁睍鍒?000涓氨鍋滄浜? 3. View 涓殑婊氬姩妫€娴嬮€昏緫涓嶅鏁忔劅锛屾棤娉曞強鏃惰Е鍙戝姞杞芥洿澶氬唴瀹? - **淇敼鍐呭**: - 淇 UpdateVirtualizationWindowInternalAsync 涓殑鏉′欢鍒ゆ柇閫昏緫锛屽皢閲嶅鐨?else if 鏀逛负鐙珛鐨?if 璇彞 - 浼樺寲鍒濆鍔犺浇鍚庣殑鍒嗛樁娈垫墿灞曢€昏緫锛屽垎涓や釜闃舵鍔犺浇锛?00涓?-> 1000涓級 - 鏀硅繘 View 涓殑 UpdateVirtualizationWindow 鏂规硶锛屽鍔犳洿绉瀬鐨勫姞杞借Е鍙戞満鍒? - 娣诲姞鍩轰簬宸插姞杞芥暟閲忓拰鎬绘暟閲忔瘮渚嬬殑寮哄埗鍔犺浇閫昏緫 - **淇敼鏂囦欢**: - AuroraDesk.Presentation/ViewModels/Pages/ImageGalleryPageViewModel.cs - AuroraDesk.Presentation/Views/Pages/ImageGalleryPageView.axaml.cs - **涓昏鏇存柊**: - 淇鏉′欢鍒ゆ柇閫昏緫: 灏?UpdateVirtualizationWindowInternalAsync 涓殑閲嶅 else if 鏀逛负鐙珛鐨?if 璇彞锛岀‘淇濇墍鏈夋潯浠堕兘鑳借姝g‘妫€鏌? - 浼樺寲鍒濆鍔犺浇: 鍒嗕袱涓樁娈佃嚜鍔ㄦ墿灞曪紙500涓?-> 1000涓級锛岄伩鍏嶄竴娆℃€у姞杞借繃澶氬鑷村崱椤? - 鏀硅繘婊氬姩妫€娴? 鍦?View 涓鍔犳洿绉瀬鐨勫姞杞借Е鍙戞満鍒讹紝鍖呮嫭锛? - 鏍规嵁宸插姞杞芥暟閲忓姩鎬佽皟鏁存墿灞曞€嶆暟锛坋xpansionFactor锛? - 褰撴粴鍔ㄦ帴杩戝簳閮ㄦ椂锛屼娇鐢ㄦ洿澶х殑鎵╁睍鍊嶆暟锛?鍊嶏級 - 褰撳凡鍔犺浇鏁伴噺杩滃皬浜庢€绘暟閲忥紙<10%锛夋椂锛屽己鍒惰Е鍙戝姞杞芥洿澶氬唴瀹? - **鏁堟灉**: - 鍔犺浇鏇存祦鐣? 鍒濆鍔犺浇鍚庝細鑷姩鍒嗛樁娈垫墿灞曞埌1000涓紝鎻愪緵鏇存祦鐣呯殑婊氬姩浣撻獙 - 婊氬姩鍝嶅簲鏇村強鏃? 婊氬姩鏃惰兘鏇村強鏃跺湴瑙﹀彂鍔犺浇鏇村鍐呭锛屼笉浼氬嚭鐜版粴鍔ㄥ埌1000涓悗鍋滄鐨勬儏鍐? - 閫昏緫鏇存竻鏅? 绉婚櫎浜嗛噸澶嶇殑鏉′欢鍒ゆ柇浠g爜锛岄€昏緫鏇存竻鏅版槗缁存姢 ### 淇婊氬姩鍔犺浇闂 - 1000涓悗缁х画鍔犺浇 - **鏃ユ湡**: 2025骞?鏈? - **闂**: 鍒濆鍔犺浇100涓浘鐗囧悗锛岃嚜鍔ㄦ墿灞曞埌1000涓紝浣嗕箣鍚庢粴鍔ㄦ椂涓嶅啀缁х画鍔犺浇鏇村鍥剧墖 - **鍘熷洜**: 1. 褰撴粴鍔ㄦ帴杩戝凡鍔犺浇鐨勬湯灏炬椂锛屾病鏈夋彁鍓嶈Е鍙戝姞杞芥洿澶氬唴瀹圭殑鏈哄埗 2. ViewModel 涓殑绐楀彛鏇存柊鍒ゆ柇閫昏緫鍦ㄦ粴鍔ㄦ帴杩戞湯灏炬椂锛屽彲鑳藉洜涓?newWindowEnd <= currentWindowEnd 鑰岃烦杩囨洿鏂? 3. View 涓殑婊氬姩妫€娴嬭櫧鐒惰绠椾簡 estimatedEndIndex锛屼絾鍙兘鍥犱负璁$畻鍑虹殑鍊煎皬浜庣瓑浜庡凡鍔犺浇鏁伴噺鑰屾棤娉曡Е鍙戝姞杞? - **淇敼鍐呭**: - 鍦?ViewModel 鐨?`UpdateVirtualizationWindowInternalAsync` 涓紝鍦ㄨ绠楁柊绐楀彛鑼冨洿涔嬪墠锛屾坊鍔犳鏌ワ細濡傛灉婊氬姩鎺ヨ繎宸插姞杞界殑鏈熬锛堣窛绂绘湯灏惧皬浜嶸irtualizationWindowSize锛夛紝寮哄埗鎵╁睍绐楀彛锛屽姞杞芥洿澶氬唴瀹癸紙鑷冲皯鍐嶅姞杞?00涓級 - 鍦?View 鐨?`UpdateVirtualizationWindow` 涓紝娣诲姞澶氫釜妫€鏌ワ細 - 濡傛灉婊氬姩鎺ヨ繎宸插姞杞界殑鏈熬锛堣窛绂绘湯灏惧皬浜?00涓級锛屽己鍒惰Е鍙戝姞杞芥洿澶? - 濡傛灉宸插姞杞芥暟閲忓皬浜庢€绘暟閲忥紝涓斾及璁$殑缁撴潫绱㈠紩灏忎簬绛変簬宸插姞杞芥暟閲忥紝寮哄埗鎵╁睍绐楀彛 - **淇敼鏂囦欢**: - AuroraDesk.Presentation/ViewModels/Pages/ImageGalleryPageViewModel.cs - AuroraDesk.Presentation/Views/Pages/ImageGalleryPageView.axaml.cs - **涓昏鏇存柊**: - 鍦?ViewModel 涓紝鍦ㄨ绠楁柊绐楀彛鑼冨洿涔嬪墠锛屾坊鍔犳彁鍓嶅姞杞芥満鍒讹細褰?visibleEndIndex >= currentWindowEnd - VirtualizationWindowSize 鏃讹紝寮哄埗鎵╁睍 newWindowEnd 鍒?currentWindowEnd + 500 - 鍦?View 涓紝娣诲姞璺濈妫€鏌ワ細褰?distanceToLoadedEnd < 500 鏃讹紝寮哄埗鎵╁睍 estimatedEndIndex - 鍦?View 涓紝娣诲姞鏈€缁堟鏌ワ細褰?loadedCount < totalCount && estimatedEndIndex <= loadedCount 鏃讹紝寮哄埗鎵╁睍 estimatedEndIndex 鍒?loadedCount + 500 - **鏁堟灉**: - 婊氬姩鍒版帴杩戝凡鍔犺浇鏈熬鏃讹紝鑳芥彁鍓嶈Е鍙戝姞杞芥洿澶氬唴瀹? - 鍗充娇璁$畻鍑虹殑缁撴潫绱㈠紩灏忎簬绛変簬宸插姞杞芥暟閲忥紝涔熻兘寮哄埗瑙﹀彂鍔犺浇 - 婊氬姩鏃惰兘鎸佺画鍔犺浇鏇村鍥剧墖锛屼笉浼氬湪1000涓悗鍋滄