[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-microsoft-winui-wpf-migration":3,"mdc--egpqwf-key":43,"related-repo-microsoft-winui-wpf-migration":1110,"related-org-microsoft-winui-wpf-migration":1136},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":22,"repoUrl":23,"updatedAt":24,"license":25,"forks":26,"topics":27,"repo":38,"sourceUrl":41,"mdContent":42},"winui-wpf-migration","migrate WPF applications to WinUI 3","Migrate WPF applications to WinUI 3 — namespace replacement (System.Windows → Microsoft.UI.Xaml), control mapping (DataGrid→ListView, WrapPanel→ItemsRepeater, TabControl→TabView), threading (Dispatcher→DispatcherQueue), imaging (System.Drawing→BitmapImage), MVVM conversion to CommunityToolkit.Mvvm, and DynamicResource→ThemeResource. Use when converting WPF code, replacing WPF namespaces, or fixing migration build errors.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"microsoft","Microsoft","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fmicrosoft.png",[12,16,19],{"name":13,"slug":14,"type":15},"Windows","windows","tag",{"name":17,"slug":18,"type":15},"Migration","migration",{"name":20,"slug":21,"type":15},"WinUI","winui",352,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fwin-dev-skills","2026-05-13T06:14:13.804392",null,19,[28,29,30,31,32,33,34,35,36,37],"agent","agent-skills","copilot","copilot-cli","ghcp","skills","winappsdk","winui3","winui3-app","xaml",{"repoUrl":23,"stars":22,"forks":26,"topics":39,"description":40},[28,29,30,31,32,33,34,35,36,37],"Agents and skills for building Windows apps with WinUI 3 and the Windows App SDK","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fwin-dev-skills\u002Ftree\u002FHEAD\u002Fplugins\u002Fwinui\u002Fskills\u002Fwinui-wpf-migration","---\nname: winui-wpf-migration\ndescription: \"Migrate WPF applications to WinUI 3 — namespace replacement (System.Windows → Microsoft.UI.Xaml), control mapping (DataGrid→ListView, WrapPanel→ItemsRepeater, TabControl→TabView), threading (Dispatcher→DispatcherQueue), imaging (System.Drawing→BitmapImage), MVVM conversion to CommunityToolkit.Mvvm, and DynamicResource→ThemeResource. Use when converting WPF code, replacing WPF namespaces, or fixing migration build errors.\"\n---\n\n### Migration Process\n\n#### Step 1: Audit the WPF Source\nBefore writing code, inventory WPF-specific APIs:\n```powershell\n# Find all WPF namespace usage\nSelect-String -Path (Get-ChildItem -Recurse -Filter \"*.cs\" | Where-Object { $_.FullName -notlike \"*\\obj\\*\" }) -Pattern \"System\\.Windows\\.\" | Select-Object -Property Filename, LineNumber, Line\n```\nList: WPF controls used, custom MVVM framework, imaging APIs, threading patterns, Win32 interop.\n\n#### Step 2: Create WinUI 3 Project and Align Namespaces\n```powershell\ndotnet new winui-mvvm -n \u003CAppName>\n```\nImmediately set `\u003CRootNamespace>` in `.csproj` to match the WPF namespace. Update `x:Class` in `App.xaml`, `MainWindow.xaml` and their code-behind files. Build to verify before porting any code.\n\n#### Step 3: Replace Namespaces\n\n| WPF | WinUI 3 |\n|-----|---------|\n| `System.Windows` | `Microsoft.UI.Xaml` |\n| `System.Windows.Controls` | `Microsoft.UI.Xaml.Controls` |\n| `System.Windows.Media` | `Microsoft.UI.Xaml.Media` |\n| `System.Windows.Input` | `Microsoft.UI.Xaml.Input` |\n| `System.Windows.Data` | `Microsoft.UI.Xaml.Data` |\n| `System.Windows.Threading.Dispatcher` | `Microsoft.UI.Dispatching.DispatcherQueue` |\n| `PresentationCore` \u002F `PresentationFramework` | Remove entirely |\n\n#### Step 4: Replace Controls\n\n| WPF Control | WinUI 3 Equivalent |\n|------------|-------------------|\n| `DataGrid` | `ListView` with Grid column headers |\n| `WrapPanel` | `ItemsRepeater` + `UniformGridLayout` |\n| `TabControl` | `TabView` |\n| `StatusBar` | `Grid` row at bottom with `TextBlock` elements |\n| `Menu` \u002F `MenuItem` | `MenuBar` \u002F `MenuBarItem` \u002F `MenuFlyoutItem` |\n| `ToolBar` | `CommandBar` |\n| `Expander` (custom) | `Expander` (built-in) |\n\n#### Step 5: Replace Threading\n```csharp\n\u002F\u002F WPF\nApplication.Current.Dispatcher.Invoke(() => { \u002F* UI work *\u002F });\n\n\u002F\u002F WinUI 3\ndispatcherQueue.TryEnqueue(() => { \u002F* UI work *\u002F });\n```\nGet via `DispatcherQueue.GetForCurrentThread()`. No `Application.Current.Dispatcher` in WinUI 3.\n\n#### Step 6: Replace Imaging\n**Critical:** `PresentationCore.dll` and `System.Windows.Media.Imaging` crash the WinUI XAML compiler. This is an architectural incompatibility — no workaround exists.\n- Remove ALL `System.Windows.Media.Imaging` references at migration start\n- Replace with `Windows.Graphics.Imaging` (WinRT) or `Microsoft.UI.Xaml.Media.Imaging.BitmapImage`\n- Do NOT add `\u003CUseWPF>true\u003C\u002FUseWPF>` — it silently corrupts the build\n- If heavy imaging code exists, migrate it early (step 2, not step 7)\n\n#### Step 7: Replace MVVM Framework\nDelete custom `ObservableObject`\u002F`RelayCommand`\u002F`DelegateCommand`. Use CommunityToolkit.Mvvm:\n- `INotifyPropertyChanged` base → `ObservableObject` with `[ObservableProperty]` partial properties\n- Custom `RelayCommand` → `[RelayCommand]` attribute\n- `{Binding}` → `{x:Bind Mode=OneWay}`\n- `DynamicResource` → `{ThemeResource}`\n\n#### Step 8: Replace Resources\n- `.resx` → `.resw` (copy + rename to `Strings\\en-us\\`)\n- `{x:Static}` → `x:Uid` for localized strings\n- `Properties.Resources.Key` → `ResourceLoader.GetString(\"Key\")`\n\n### Critical Rules\n\n- ❌ NEVER reference `PresentationCore`, `PresentationFramework`, or `System.Windows.Controls` assemblies\n- ❌ NEVER add `\u003CUseWPF>true\u003C\u002FUseWPF>` or `\u003CWindowsPackageType>None\u003C\u002FWindowsPackageType>`\n- ❌ NEVER delete `Package.appxmanifest`\n- ❌ NEVER overwrite `App.xaml` \u002F `App.xaml.cs` — merge WPF code into the WinUI 3 boilerplate\n- ✅ Always use `winapp run` to launch — never run the .exe directly\n- ✅ Break migration into file-level tasks — not one massive rewrite\n\n### Post-Migration Validation\n\n```powershell\n# Check for remaining WPF references (should return nothing)\nSelect-String -Path (Get-ChildItem -Recurse -Filter \"*.cs\" | Where-Object { $_.FullName -notlike \"*\\obj\\*\" }) -Pattern \"System\\.Windows\\.\"\n\n# Verify packaging preserved\nTest-Path \"Package.appxmanifest\"  # should be True\n\n# Build and run\n.\\BuildAndRun.ps1\n```\n",{"data":44,"body":45},{"name":4,"description":6},{"type":46,"children":47},"root",[48,57,64,70,102,107,113,127,171,177,356,362,575,581,634,655,661,688,742,748,776,857,863,926,932,1026,1032,1104],{"type":49,"tag":50,"props":51,"children":53},"element","h3",{"id":52},"migration-process",[54],{"type":55,"value":56},"text","Migration Process",{"type":49,"tag":58,"props":59,"children":61},"h4",{"id":60},"step-1-audit-the-wpf-source",[62],{"type":55,"value":63},"Step 1: Audit the WPF Source",{"type":49,"tag":65,"props":66,"children":67},"p",{},[68],{"type":55,"value":69},"Before writing code, inventory WPF-specific APIs:",{"type":49,"tag":71,"props":72,"children":77},"pre",{"className":73,"code":74,"language":75,"meta":76,"style":76},"language-powershell shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Find all WPF namespace usage\nSelect-String -Path (Get-ChildItem -Recurse -Filter \"*.cs\" | Where-Object { $_.FullName -notlike \"*\\obj\\*\" }) -Pattern \"System\\.Windows\\.\" | Select-Object -Property Filename, LineNumber, Line\n","powershell","",[78],{"type":49,"tag":79,"props":80,"children":81},"code",{"__ignoreMap":76},[82,93],{"type":49,"tag":83,"props":84,"children":87},"span",{"class":85,"line":86},"line",1,[88],{"type":49,"tag":83,"props":89,"children":90},{},[91],{"type":55,"value":92},"# Find all WPF namespace usage\n",{"type":49,"tag":83,"props":94,"children":96},{"class":85,"line":95},2,[97],{"type":49,"tag":83,"props":98,"children":99},{},[100],{"type":55,"value":101},"Select-String -Path (Get-ChildItem -Recurse -Filter \"*.cs\" | Where-Object { $_.FullName -notlike \"*\\obj\\*\" }) -Pattern \"System\\.Windows\\.\" | Select-Object -Property Filename, LineNumber, Line\n",{"type":49,"tag":65,"props":103,"children":104},{},[105],{"type":55,"value":106},"List: WPF controls used, custom MVVM framework, imaging APIs, threading patterns, Win32 interop.",{"type":49,"tag":58,"props":108,"children":110},{"id":109},"step-2-create-winui-3-project-and-align-namespaces",[111],{"type":55,"value":112},"Step 2: Create WinUI 3 Project and Align Namespaces",{"type":49,"tag":71,"props":114,"children":116},{"className":73,"code":115,"language":75,"meta":76,"style":76},"dotnet new winui-mvvm -n \u003CAppName>\n",[117],{"type":49,"tag":79,"props":118,"children":119},{"__ignoreMap":76},[120],{"type":49,"tag":83,"props":121,"children":122},{"class":85,"line":86},[123],{"type":49,"tag":83,"props":124,"children":125},{},[126],{"type":55,"value":115},{"type":49,"tag":65,"props":128,"children":129},{},[130,132,138,140,146,148,154,155,161,163,169],{"type":55,"value":131},"Immediately set ",{"type":49,"tag":79,"props":133,"children":135},{"className":134},[],[136],{"type":55,"value":137},"\u003CRootNamespace>",{"type":55,"value":139}," in ",{"type":49,"tag":79,"props":141,"children":143},{"className":142},[],[144],{"type":55,"value":145},".csproj",{"type":55,"value":147}," to match the WPF namespace. Update ",{"type":49,"tag":79,"props":149,"children":151},{"className":150},[],[152],{"type":55,"value":153},"x:Class",{"type":55,"value":139},{"type":49,"tag":79,"props":156,"children":158},{"className":157},[],[159],{"type":55,"value":160},"App.xaml",{"type":55,"value":162},", ",{"type":49,"tag":79,"props":164,"children":166},{"className":165},[],[167],{"type":55,"value":168},"MainWindow.xaml",{"type":55,"value":170}," and their code-behind files. Build to verify before porting any code.",{"type":49,"tag":58,"props":172,"children":174},{"id":173},"step-3-replace-namespaces",[175],{"type":55,"value":176},"Step 3: Replace Namespaces",{"type":49,"tag":178,"props":179,"children":180},"table",{},[181,200],{"type":49,"tag":182,"props":183,"children":184},"thead",{},[185],{"type":49,"tag":186,"props":187,"children":188},"tr",{},[189,195],{"type":49,"tag":190,"props":191,"children":192},"th",{},[193],{"type":55,"value":194},"WPF",{"type":49,"tag":190,"props":196,"children":197},{},[198],{"type":55,"value":199},"WinUI 3",{"type":49,"tag":201,"props":202,"children":203},"tbody",{},[204,226,247,268,289,310,331],{"type":49,"tag":186,"props":205,"children":206},{},[207,217],{"type":49,"tag":208,"props":209,"children":210},"td",{},[211],{"type":49,"tag":79,"props":212,"children":214},{"className":213},[],[215],{"type":55,"value":216},"System.Windows",{"type":49,"tag":208,"props":218,"children":219},{},[220],{"type":49,"tag":79,"props":221,"children":223},{"className":222},[],[224],{"type":55,"value":225},"Microsoft.UI.Xaml",{"type":49,"tag":186,"props":227,"children":228},{},[229,238],{"type":49,"tag":208,"props":230,"children":231},{},[232],{"type":49,"tag":79,"props":233,"children":235},{"className":234},[],[236],{"type":55,"value":237},"System.Windows.Controls",{"type":49,"tag":208,"props":239,"children":240},{},[241],{"type":49,"tag":79,"props":242,"children":244},{"className":243},[],[245],{"type":55,"value":246},"Microsoft.UI.Xaml.Controls",{"type":49,"tag":186,"props":248,"children":249},{},[250,259],{"type":49,"tag":208,"props":251,"children":252},{},[253],{"type":49,"tag":79,"props":254,"children":256},{"className":255},[],[257],{"type":55,"value":258},"System.Windows.Media",{"type":49,"tag":208,"props":260,"children":261},{},[262],{"type":49,"tag":79,"props":263,"children":265},{"className":264},[],[266],{"type":55,"value":267},"Microsoft.UI.Xaml.Media",{"type":49,"tag":186,"props":269,"children":270},{},[271,280],{"type":49,"tag":208,"props":272,"children":273},{},[274],{"type":49,"tag":79,"props":275,"children":277},{"className":276},[],[278],{"type":55,"value":279},"System.Windows.Input",{"type":49,"tag":208,"props":281,"children":282},{},[283],{"type":49,"tag":79,"props":284,"children":286},{"className":285},[],[287],{"type":55,"value":288},"Microsoft.UI.Xaml.Input",{"type":49,"tag":186,"props":290,"children":291},{},[292,301],{"type":49,"tag":208,"props":293,"children":294},{},[295],{"type":49,"tag":79,"props":296,"children":298},{"className":297},[],[299],{"type":55,"value":300},"System.Windows.Data",{"type":49,"tag":208,"props":302,"children":303},{},[304],{"type":49,"tag":79,"props":305,"children":307},{"className":306},[],[308],{"type":55,"value":309},"Microsoft.UI.Xaml.Data",{"type":49,"tag":186,"props":311,"children":312},{},[313,322],{"type":49,"tag":208,"props":314,"children":315},{},[316],{"type":49,"tag":79,"props":317,"children":319},{"className":318},[],[320],{"type":55,"value":321},"System.Windows.Threading.Dispatcher",{"type":49,"tag":208,"props":323,"children":324},{},[325],{"type":49,"tag":79,"props":326,"children":328},{"className":327},[],[329],{"type":55,"value":330},"Microsoft.UI.Dispatching.DispatcherQueue",{"type":49,"tag":186,"props":332,"children":333},{},[334,351],{"type":49,"tag":208,"props":335,"children":336},{},[337,343,345],{"type":49,"tag":79,"props":338,"children":340},{"className":339},[],[341],{"type":55,"value":342},"PresentationCore",{"type":55,"value":344}," \u002F ",{"type":49,"tag":79,"props":346,"children":348},{"className":347},[],[349],{"type":55,"value":350},"PresentationFramework",{"type":49,"tag":208,"props":352,"children":353},{},[354],{"type":55,"value":355},"Remove entirely",{"type":49,"tag":58,"props":357,"children":359},{"id":358},"step-4-replace-controls",[360],{"type":55,"value":361},"Step 4: Replace Controls",{"type":49,"tag":178,"props":363,"children":364},{},[365,381],{"type":49,"tag":182,"props":366,"children":367},{},[368],{"type":49,"tag":186,"props":369,"children":370},{},[371,376],{"type":49,"tag":190,"props":372,"children":373},{},[374],{"type":55,"value":375},"WPF Control",{"type":49,"tag":190,"props":377,"children":378},{},[379],{"type":55,"value":380},"WinUI 3 Equivalent",{"type":49,"tag":201,"props":382,"children":383},{},[384,407,436,457,488,530,551],{"type":49,"tag":186,"props":385,"children":386},{},[387,396],{"type":49,"tag":208,"props":388,"children":389},{},[390],{"type":49,"tag":79,"props":391,"children":393},{"className":392},[],[394],{"type":55,"value":395},"DataGrid",{"type":49,"tag":208,"props":397,"children":398},{},[399,405],{"type":49,"tag":79,"props":400,"children":402},{"className":401},[],[403],{"type":55,"value":404},"ListView",{"type":55,"value":406}," with Grid column headers",{"type":49,"tag":186,"props":408,"children":409},{},[410,419],{"type":49,"tag":208,"props":411,"children":412},{},[413],{"type":49,"tag":79,"props":414,"children":416},{"className":415},[],[417],{"type":55,"value":418},"WrapPanel",{"type":49,"tag":208,"props":420,"children":421},{},[422,428,430],{"type":49,"tag":79,"props":423,"children":425},{"className":424},[],[426],{"type":55,"value":427},"ItemsRepeater",{"type":55,"value":429}," + ",{"type":49,"tag":79,"props":431,"children":433},{"className":432},[],[434],{"type":55,"value":435},"UniformGridLayout",{"type":49,"tag":186,"props":437,"children":438},{},[439,448],{"type":49,"tag":208,"props":440,"children":441},{},[442],{"type":49,"tag":79,"props":443,"children":445},{"className":444},[],[446],{"type":55,"value":447},"TabControl",{"type":49,"tag":208,"props":449,"children":450},{},[451],{"type":49,"tag":79,"props":452,"children":454},{"className":453},[],[455],{"type":55,"value":456},"TabView",{"type":49,"tag":186,"props":458,"children":459},{},[460,469],{"type":49,"tag":208,"props":461,"children":462},{},[463],{"type":49,"tag":79,"props":464,"children":466},{"className":465},[],[467],{"type":55,"value":468},"StatusBar",{"type":49,"tag":208,"props":470,"children":471},{},[472,478,480,486],{"type":49,"tag":79,"props":473,"children":475},{"className":474},[],[476],{"type":55,"value":477},"Grid",{"type":55,"value":479}," row at bottom with ",{"type":49,"tag":79,"props":481,"children":483},{"className":482},[],[484],{"type":55,"value":485},"TextBlock",{"type":55,"value":487}," elements",{"type":49,"tag":186,"props":489,"children":490},{},[491,507],{"type":49,"tag":208,"props":492,"children":493},{},[494,500,501],{"type":49,"tag":79,"props":495,"children":497},{"className":496},[],[498],{"type":55,"value":499},"Menu",{"type":55,"value":344},{"type":49,"tag":79,"props":502,"children":504},{"className":503},[],[505],{"type":55,"value":506},"MenuItem",{"type":49,"tag":208,"props":508,"children":509},{},[510,516,517,523,524],{"type":49,"tag":79,"props":511,"children":513},{"className":512},[],[514],{"type":55,"value":515},"MenuBar",{"type":55,"value":344},{"type":49,"tag":79,"props":518,"children":520},{"className":519},[],[521],{"type":55,"value":522},"MenuBarItem",{"type":55,"value":344},{"type":49,"tag":79,"props":525,"children":527},{"className":526},[],[528],{"type":55,"value":529},"MenuFlyoutItem",{"type":49,"tag":186,"props":531,"children":532},{},[533,542],{"type":49,"tag":208,"props":534,"children":535},{},[536],{"type":49,"tag":79,"props":537,"children":539},{"className":538},[],[540],{"type":55,"value":541},"ToolBar",{"type":49,"tag":208,"props":543,"children":544},{},[545],{"type":49,"tag":79,"props":546,"children":548},{"className":547},[],[549],{"type":55,"value":550},"CommandBar",{"type":49,"tag":186,"props":552,"children":553},{},[554,565],{"type":49,"tag":208,"props":555,"children":556},{},[557,563],{"type":49,"tag":79,"props":558,"children":560},{"className":559},[],[561],{"type":55,"value":562},"Expander",{"type":55,"value":564}," (custom)",{"type":49,"tag":208,"props":566,"children":567},{},[568,573],{"type":49,"tag":79,"props":569,"children":571},{"className":570},[],[572],{"type":55,"value":562},{"type":55,"value":574}," (built-in)",{"type":49,"tag":58,"props":576,"children":578},{"id":577},"step-5-replace-threading",[579],{"type":55,"value":580},"Step 5: Replace Threading",{"type":49,"tag":71,"props":582,"children":586},{"className":583,"code":584,"language":585,"meta":76,"style":76},"language-csharp shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F WPF\nApplication.Current.Dispatcher.Invoke(() => { \u002F* UI work *\u002F });\n\n\u002F\u002F WinUI 3\ndispatcherQueue.TryEnqueue(() => { \u002F* UI work *\u002F });\n","csharp",[587],{"type":49,"tag":79,"props":588,"children":589},{"__ignoreMap":76},[590,598,606,616,625],{"type":49,"tag":83,"props":591,"children":592},{"class":85,"line":86},[593],{"type":49,"tag":83,"props":594,"children":595},{},[596],{"type":55,"value":597},"\u002F\u002F WPF\n",{"type":49,"tag":83,"props":599,"children":600},{"class":85,"line":95},[601],{"type":49,"tag":83,"props":602,"children":603},{},[604],{"type":55,"value":605},"Application.Current.Dispatcher.Invoke(() => { \u002F* UI work *\u002F });\n",{"type":49,"tag":83,"props":607,"children":609},{"class":85,"line":608},3,[610],{"type":49,"tag":83,"props":611,"children":613},{"emptyLinePlaceholder":612},true,[614],{"type":55,"value":615},"\n",{"type":49,"tag":83,"props":617,"children":619},{"class":85,"line":618},4,[620],{"type":49,"tag":83,"props":621,"children":622},{},[623],{"type":55,"value":624},"\u002F\u002F WinUI 3\n",{"type":49,"tag":83,"props":626,"children":628},{"class":85,"line":627},5,[629],{"type":49,"tag":83,"props":630,"children":631},{},[632],{"type":55,"value":633},"dispatcherQueue.TryEnqueue(() => { \u002F* UI work *\u002F });\n",{"type":49,"tag":65,"props":635,"children":636},{},[637,639,645,647,653],{"type":55,"value":638},"Get via ",{"type":49,"tag":79,"props":640,"children":642},{"className":641},[],[643],{"type":55,"value":644},"DispatcherQueue.GetForCurrentThread()",{"type":55,"value":646},". No ",{"type":49,"tag":79,"props":648,"children":650},{"className":649},[],[651],{"type":55,"value":652},"Application.Current.Dispatcher",{"type":55,"value":654}," in WinUI 3.",{"type":49,"tag":58,"props":656,"children":658},{"id":657},"step-6-replace-imaging",[659],{"type":55,"value":660},"Step 6: Replace Imaging",{"type":49,"tag":65,"props":662,"children":663},{},[664,670,672,678,680,686],{"type":49,"tag":665,"props":666,"children":667},"strong",{},[668],{"type":55,"value":669},"Critical:",{"type":55,"value":671}," ",{"type":49,"tag":79,"props":673,"children":675},{"className":674},[],[676],{"type":55,"value":677},"PresentationCore.dll",{"type":55,"value":679}," and ",{"type":49,"tag":79,"props":681,"children":683},{"className":682},[],[684],{"type":55,"value":685},"System.Windows.Media.Imaging",{"type":55,"value":687}," crash the WinUI XAML compiler. This is an architectural incompatibility — no workaround exists.",{"type":49,"tag":689,"props":690,"children":691},"ul",{},[692,705,724,737],{"type":49,"tag":693,"props":694,"children":695},"li",{},[696,698,703],{"type":55,"value":697},"Remove ALL ",{"type":49,"tag":79,"props":699,"children":701},{"className":700},[],[702],{"type":55,"value":685},{"type":55,"value":704}," references at migration start",{"type":49,"tag":693,"props":706,"children":707},{},[708,710,716,718],{"type":55,"value":709},"Replace with ",{"type":49,"tag":79,"props":711,"children":713},{"className":712},[],[714],{"type":55,"value":715},"Windows.Graphics.Imaging",{"type":55,"value":717}," (WinRT) or ",{"type":49,"tag":79,"props":719,"children":721},{"className":720},[],[722],{"type":55,"value":723},"Microsoft.UI.Xaml.Media.Imaging.BitmapImage",{"type":49,"tag":693,"props":725,"children":726},{},[727,729,735],{"type":55,"value":728},"Do NOT add ",{"type":49,"tag":79,"props":730,"children":732},{"className":731},[],[733],{"type":55,"value":734},"\u003CUseWPF>true\u003C\u002FUseWPF>",{"type":55,"value":736}," — it silently corrupts the build",{"type":49,"tag":693,"props":738,"children":739},{},[740],{"type":55,"value":741},"If heavy imaging code exists, migrate it early (step 2, not step 7)",{"type":49,"tag":58,"props":743,"children":745},{"id":744},"step-7-replace-mvvm-framework",[746],{"type":55,"value":747},"Step 7: Replace MVVM Framework",{"type":49,"tag":65,"props":749,"children":750},{},[751,753,759,761,767,768,774],{"type":55,"value":752},"Delete custom ",{"type":49,"tag":79,"props":754,"children":756},{"className":755},[],[757],{"type":55,"value":758},"ObservableObject",{"type":55,"value":760},"\u002F",{"type":49,"tag":79,"props":762,"children":764},{"className":763},[],[765],{"type":55,"value":766},"RelayCommand",{"type":55,"value":760},{"type":49,"tag":79,"props":769,"children":771},{"className":770},[],[772],{"type":55,"value":773},"DelegateCommand",{"type":55,"value":775},". Use CommunityToolkit.Mvvm:",{"type":49,"tag":689,"props":777,"children":778},{},[779,805,825,841],{"type":49,"tag":693,"props":780,"children":781},{},[782,788,790,795,797,803],{"type":49,"tag":79,"props":783,"children":785},{"className":784},[],[786],{"type":55,"value":787},"INotifyPropertyChanged",{"type":55,"value":789}," base → ",{"type":49,"tag":79,"props":791,"children":793},{"className":792},[],[794],{"type":55,"value":758},{"type":55,"value":796}," with ",{"type":49,"tag":79,"props":798,"children":800},{"className":799},[],[801],{"type":55,"value":802},"[ObservableProperty]",{"type":55,"value":804}," partial properties",{"type":49,"tag":693,"props":806,"children":807},{},[808,810,815,817,823],{"type":55,"value":809},"Custom ",{"type":49,"tag":79,"props":811,"children":813},{"className":812},[],[814],{"type":55,"value":766},{"type":55,"value":816}," → ",{"type":49,"tag":79,"props":818,"children":820},{"className":819},[],[821],{"type":55,"value":822},"[RelayCommand]",{"type":55,"value":824}," attribute",{"type":49,"tag":693,"props":826,"children":827},{},[828,834,835],{"type":49,"tag":79,"props":829,"children":831},{"className":830},[],[832],{"type":55,"value":833},"{Binding}",{"type":55,"value":816},{"type":49,"tag":79,"props":836,"children":838},{"className":837},[],[839],{"type":55,"value":840},"{x:Bind Mode=OneWay}",{"type":49,"tag":693,"props":842,"children":843},{},[844,850,851],{"type":49,"tag":79,"props":845,"children":847},{"className":846},[],[848],{"type":55,"value":849},"DynamicResource",{"type":55,"value":816},{"type":49,"tag":79,"props":852,"children":854},{"className":853},[],[855],{"type":55,"value":856},"{ThemeResource}",{"type":49,"tag":58,"props":858,"children":860},{"id":859},"step-8-replace-resources",[861],{"type":55,"value":862},"Step 8: Replace Resources",{"type":49,"tag":689,"props":864,"children":865},{},[866,892,910],{"type":49,"tag":693,"props":867,"children":868},{},[869,875,876,882,884,890],{"type":49,"tag":79,"props":870,"children":872},{"className":871},[],[873],{"type":55,"value":874},".resx",{"type":55,"value":816},{"type":49,"tag":79,"props":877,"children":879},{"className":878},[],[880],{"type":55,"value":881},".resw",{"type":55,"value":883}," (copy + rename to ",{"type":49,"tag":79,"props":885,"children":887},{"className":886},[],[888],{"type":55,"value":889},"Strings\\en-us\\",{"type":55,"value":891},")",{"type":49,"tag":693,"props":893,"children":894},{},[895,901,902,908],{"type":49,"tag":79,"props":896,"children":898},{"className":897},[],[899],{"type":55,"value":900},"{x:Static}",{"type":55,"value":816},{"type":49,"tag":79,"props":903,"children":905},{"className":904},[],[906],{"type":55,"value":907},"x:Uid",{"type":55,"value":909}," for localized strings",{"type":49,"tag":693,"props":911,"children":912},{},[913,919,920],{"type":49,"tag":79,"props":914,"children":916},{"className":915},[],[917],{"type":55,"value":918},"Properties.Resources.Key",{"type":55,"value":816},{"type":49,"tag":79,"props":921,"children":923},{"className":922},[],[924],{"type":55,"value":925},"ResourceLoader.GetString(\"Key\")",{"type":49,"tag":50,"props":927,"children":929},{"id":928},"critical-rules",[930],{"type":55,"value":931},"Critical Rules",{"type":49,"tag":689,"props":933,"children":934},{},[935,960,978,989,1008,1021],{"type":49,"tag":693,"props":936,"children":937},{},[938,940,945,946,951,953,958],{"type":55,"value":939},"❌ NEVER reference ",{"type":49,"tag":79,"props":941,"children":943},{"className":942},[],[944],{"type":55,"value":342},{"type":55,"value":162},{"type":49,"tag":79,"props":947,"children":949},{"className":948},[],[950],{"type":55,"value":350},{"type":55,"value":952},", or ",{"type":49,"tag":79,"props":954,"children":956},{"className":955},[],[957],{"type":55,"value":237},{"type":55,"value":959}," assemblies",{"type":49,"tag":693,"props":961,"children":962},{},[963,965,970,972],{"type":55,"value":964},"❌ NEVER add ",{"type":49,"tag":79,"props":966,"children":968},{"className":967},[],[969],{"type":55,"value":734},{"type":55,"value":971}," or ",{"type":49,"tag":79,"props":973,"children":975},{"className":974},[],[976],{"type":55,"value":977},"\u003CWindowsPackageType>None\u003C\u002FWindowsPackageType>",{"type":49,"tag":693,"props":979,"children":980},{},[981,983],{"type":55,"value":982},"❌ NEVER delete ",{"type":49,"tag":79,"props":984,"children":986},{"className":985},[],[987],{"type":55,"value":988},"Package.appxmanifest",{"type":49,"tag":693,"props":990,"children":991},{},[992,994,999,1000,1006],{"type":55,"value":993},"❌ NEVER overwrite ",{"type":49,"tag":79,"props":995,"children":997},{"className":996},[],[998],{"type":55,"value":160},{"type":55,"value":344},{"type":49,"tag":79,"props":1001,"children":1003},{"className":1002},[],[1004],{"type":55,"value":1005},"App.xaml.cs",{"type":55,"value":1007}," — merge WPF code into the WinUI 3 boilerplate",{"type":49,"tag":693,"props":1009,"children":1010},{},[1011,1013,1019],{"type":55,"value":1012},"✅ Always use ",{"type":49,"tag":79,"props":1014,"children":1016},{"className":1015},[],[1017],{"type":55,"value":1018},"winapp run",{"type":55,"value":1020}," to launch — never run the .exe directly",{"type":49,"tag":693,"props":1022,"children":1023},{},[1024],{"type":55,"value":1025},"✅ Break migration into file-level tasks — not one massive rewrite",{"type":49,"tag":50,"props":1027,"children":1029},{"id":1028},"post-migration-validation",[1030],{"type":55,"value":1031},"Post-Migration Validation",{"type":49,"tag":71,"props":1033,"children":1035},{"className":73,"code":1034,"language":75,"meta":76,"style":76},"# Check for remaining WPF references (should return nothing)\nSelect-String -Path (Get-ChildItem -Recurse -Filter \"*.cs\" | Where-Object { $_.FullName -notlike \"*\\obj\\*\" }) -Pattern \"System\\.Windows\\.\"\n\n# Verify packaging preserved\nTest-Path \"Package.appxmanifest\"  # should be True\n\n# Build and run\n.\\BuildAndRun.ps1\n",[1036],{"type":49,"tag":79,"props":1037,"children":1038},{"__ignoreMap":76},[1039,1047,1055,1062,1070,1078,1086,1095],{"type":49,"tag":83,"props":1040,"children":1041},{"class":85,"line":86},[1042],{"type":49,"tag":83,"props":1043,"children":1044},{},[1045],{"type":55,"value":1046},"# Check for remaining WPF references (should return nothing)\n",{"type":49,"tag":83,"props":1048,"children":1049},{"class":85,"line":95},[1050],{"type":49,"tag":83,"props":1051,"children":1052},{},[1053],{"type":55,"value":1054},"Select-String -Path (Get-ChildItem -Recurse -Filter \"*.cs\" | Where-Object { $_.FullName -notlike \"*\\obj\\*\" }) -Pattern \"System\\.Windows\\.\"\n",{"type":49,"tag":83,"props":1056,"children":1057},{"class":85,"line":608},[1058],{"type":49,"tag":83,"props":1059,"children":1060},{"emptyLinePlaceholder":612},[1061],{"type":55,"value":615},{"type":49,"tag":83,"props":1063,"children":1064},{"class":85,"line":618},[1065],{"type":49,"tag":83,"props":1066,"children":1067},{},[1068],{"type":55,"value":1069},"# Verify packaging preserved\n",{"type":49,"tag":83,"props":1071,"children":1072},{"class":85,"line":627},[1073],{"type":49,"tag":83,"props":1074,"children":1075},{},[1076],{"type":55,"value":1077},"Test-Path \"Package.appxmanifest\"  # should be True\n",{"type":49,"tag":83,"props":1079,"children":1081},{"class":85,"line":1080},6,[1082],{"type":49,"tag":83,"props":1083,"children":1084},{"emptyLinePlaceholder":612},[1085],{"type":55,"value":615},{"type":49,"tag":83,"props":1087,"children":1089},{"class":85,"line":1088},7,[1090],{"type":49,"tag":83,"props":1091,"children":1092},{},[1093],{"type":55,"value":1094},"# Build and run\n",{"type":49,"tag":83,"props":1096,"children":1098},{"class":85,"line":1097},8,[1099],{"type":49,"tag":83,"props":1100,"children":1101},{},[1102],{"type":55,"value":1103},".\\BuildAndRun.ps1\n",{"type":49,"tag":1105,"props":1106,"children":1107},"style",{},[1108],{"type":55,"value":1109},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1111,"total":95},[1112,1130],{"slug":1113,"name":1113,"fn":1114,"description":1115,"org":1116,"tags":1117,"stars":22,"repoUrl":23,"updatedAt":1129},"winui-design","design WinUI 3 user interfaces","Use when designing, reviewing, or fixing WinUI 3: layout planning, control choice, Fluent Design alignment, Light\u002FDark\u002FHigh Contrast theming, typography, spacing, brushes, accessibility, and XAML data-binding design. Load before authoring new XAML, reviewing UI PRs, migrating desktop UI to WinUI, or choosing between WinUI controls\u002Fpatterns.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1118,1121,1124,1127,1128],{"name":1119,"slug":1120,"type":15},"Accessibility","accessibility",{"name":1122,"slug":1123,"type":15},"Design","design",{"name":1125,"slug":1126,"type":15},"UI Components","ui-components",{"name":13,"slug":14,"type":15},{"name":20,"slug":21,"type":15},"2026-07-24T05:42:12.022973",{"slug":4,"name":4,"fn":5,"description":6,"org":1131,"tags":1132,"stars":22,"repoUrl":23,"updatedAt":24},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1133,1134,1135],{"name":17,"slug":18,"type":15},{"name":13,"slug":14,"type":15},{"name":20,"slug":21,"type":15},{"items":1137,"total":1332},[1138,1160,1181,1202,1217,1234,1245,1258,1273,1288,1307,1320],{"slug":1139,"name":1139,"fn":1140,"description":1141,"org":1142,"tags":1143,"stars":1157,"repoUrl":1158,"updatedAt":1159},"rushstack-best-practices","manage Rush monorepos with best practices","Provides best practices and guidance for working with Rush monorepos. Use when the user is working in a Rush-based repository, asks about Rush commands (install, update, build, rebuild), needs help with project selection, dependency management, build caching, subspace configuration, or troubleshooting Rush-specific issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1144,1147,1150,1151,1154],{"name":1145,"slug":1146,"type":15},"Engineering","engineering",{"name":1148,"slug":1149,"type":15},"Local Development","local-development",{"name":9,"slug":8,"type":15},{"name":1152,"slug":1153,"type":15},"Project Management","project-management",{"name":1155,"slug":1156,"type":15},"Rush","rush",6484,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Frushstack","2026-04-06T18:34:44.965032",{"slug":1161,"name":1161,"fn":1162,"description":1163,"org":1164,"tags":1165,"stars":1178,"repoUrl":1179,"updatedAt":1180},"azure-ai-agents-persistent-dotnet","build AI agents with Azure .NET SDK","Azure AI Agents Persistent SDK for .NET. Low-level SDK for creating and managing AI agents with threads, messages, runs, and tools. Use for agent CRUD, conversation threads, streaming responses, function calling, file search, and code interpreter. Triggers: \"PersistentAgentsClient\", \"persistent agents\", \"agent threads\", \"agent runs\", \"streaming agents\", \"function calling agents .NET\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1166,1169,1172,1175],{"name":1167,"slug":1168,"type":15},".NET","net",{"name":1170,"slug":1171,"type":15},"Agents","agents",{"name":1173,"slug":1174,"type":15},"Azure","azure",{"name":1176,"slug":1177,"type":15},"LLM","llm",2804,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills","2026-07-03T16:32:10.297433",{"slug":1182,"name":1182,"fn":1183,"description":1184,"org":1185,"tags":1186,"stars":1178,"repoUrl":1179,"updatedAt":1201},"azure-ai-anomalydetector-java","build anomaly detection applications with Java","Build anomaly detection applications with Azure AI Anomaly Detector SDK for Java. Use when implementing univariate\u002Fmultivariate anomaly detection, time-series analysis, or AI-powered monitoring.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1187,1190,1191,1194,1197,1198],{"name":1188,"slug":1189,"type":15},"Analytics","analytics",{"name":1173,"slug":1174,"type":15},{"name":1192,"slug":1193,"type":15},"Data Analysis","data-analysis",{"name":1195,"slug":1196,"type":15},"Java","java",{"name":9,"slug":8,"type":15},{"name":1199,"slug":1200,"type":15},"Monitoring","monitoring","2026-05-13T06:14:16.261754",{"slug":1203,"name":1203,"fn":1204,"description":1205,"org":1206,"tags":1207,"stars":1178,"repoUrl":1179,"updatedAt":1216},"azure-ai-contentsafety-java","build content moderation applications with Azure AI","Build content moderation applications with Azure AI Content Safety SDK for Java. Use when implementing text\u002Fimage analysis, blocklist management, or harm detection for hate, violence, sexual content, and self-harm.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1208,1211,1212,1213],{"name":1209,"slug":1210,"type":15},"AI Infrastructure","ai-infrastructure",{"name":1173,"slug":1174,"type":15},{"name":1195,"slug":1196,"type":15},{"name":1214,"slug":1215,"type":15},"Security","security","2026-07-07T06:53:31.293235",{"slug":1218,"name":1218,"fn":1219,"description":1220,"org":1221,"tags":1222,"stars":1178,"repoUrl":1179,"updatedAt":1233},"azure-ai-contentsafety-py","detect harmful content with Azure AI Content Safety","Azure AI Content Safety SDK for Python. Use for detecting harmful content in text and images with multi-severity classification.\nTriggers: \"azure-ai-contentsafety\", \"ContentSafetyClient\", \"content moderation\", \"harmful content\", \"text analysis\", \"image analysis\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1223,1224,1227,1228,1229,1232],{"name":1173,"slug":1174,"type":15},{"name":1225,"slug":1226,"type":15},"Compliance","compliance",{"name":1176,"slug":1177,"type":15},{"name":9,"slug":8,"type":15},{"name":1230,"slug":1231,"type":15},"Python","python",{"name":1214,"slug":1215,"type":15},"2026-07-18T05:14:23.017504",{"slug":1235,"name":1235,"fn":1236,"description":1237,"org":1238,"tags":1239,"stars":1178,"repoUrl":1179,"updatedAt":1244},"azure-ai-language-conversations-py","implement conversational language understanding with Python","Implement Conversational Language Understanding (CLU) using the azure-ai-language-conversations Python SDK. Use when working with ConversationAnalysisClient to analyze conversation intent and entities, building NLP features, or integrating language understanding into applications.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1240,1241,1242,1243],{"name":1188,"slug":1189,"type":15},{"name":1173,"slug":1174,"type":15},{"name":1176,"slug":1177,"type":15},{"name":1230,"slug":1231,"type":15},"2026-07-31T05:54:29.068751",{"slug":1246,"name":1246,"fn":1247,"description":1248,"org":1249,"tags":1250,"stars":1178,"repoUrl":1179,"updatedAt":1257},"azure-ai-translation-text-py","translate text using Azure AI services","Azure AI Text Translation SDK for real-time text translation, transliteration, language detection, and dictionary lookup. Use for translating text content in applications.\nTriggers: \"text translation\", \"translator\", \"translate text\", \"transliterate\", \"TextTranslationClient\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1251,1254,1255,1256],{"name":1252,"slug":1253,"type":15},"API Development","api-development",{"name":1173,"slug":1174,"type":15},{"name":9,"slug":8,"type":15},{"name":1230,"slug":1231,"type":15},"2026-07-18T05:14:16.988376",{"slug":1259,"name":1259,"fn":1260,"description":1261,"org":1262,"tags":1263,"stars":1178,"repoUrl":1179,"updatedAt":1272},"azure-ai-vision-imageanalysis-py","analyze images with Azure AI Vision","Azure AI Vision Image Analysis SDK for captions, tags, objects, OCR, people detection, and smart cropping. Use for computer vision and image understanding tasks.\nTriggers: \"image analysis\", \"computer vision\", \"OCR\", \"object detection\", \"ImageAnalysisClient\", \"image caption\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1264,1265,1268,1271],{"name":1173,"slug":1174,"type":15},{"name":1266,"slug":1267,"type":15},"Computer Vision","computer-vision",{"name":1269,"slug":1270,"type":15},"Images","images",{"name":1230,"slug":1231,"type":15},"2026-07-18T05:14:18.007737",{"slug":1274,"name":1274,"fn":1275,"description":1276,"org":1277,"tags":1278,"stars":1178,"repoUrl":1179,"updatedAt":1287},"azure-appconfiguration-java","manage configuration with Azure App Configuration","Azure App Configuration SDK for Java. Centralized application configuration management with key-value settings, feature flags, and snapshots.\nTriggers: \"ConfigurationClient java\", \"app configuration java\", \"feature flag java\", \"configuration setting java\", \"azure config java\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1279,1280,1283,1286],{"name":1173,"slug":1174,"type":15},{"name":1281,"slug":1282,"type":15},"Configuration","configuration",{"name":1284,"slug":1285,"type":15},"Feature Flags","feature-flags",{"name":1195,"slug":1196,"type":15},"2026-07-03T16:32:01.278468",{"slug":1289,"name":1289,"fn":1290,"description":1291,"org":1292,"tags":1293,"stars":1178,"repoUrl":1179,"updatedAt":1306},"azure-cosmos-rust","build applications with Azure Cosmos DB","Azure Cosmos DB library for Rust (NoSQL API). Document CRUD, containers, and globally distributed data.\nTriggers: \"cosmos db rust\", \"CosmosClient rust\", \"document crud rust\", \"NoSQL rust\", \"partition key rust\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1294,1297,1300,1303],{"name":1295,"slug":1296,"type":15},"Cosmos DB","cosmos-db",{"name":1298,"slug":1299,"type":15},"Database","database",{"name":1301,"slug":1302,"type":15},"NoSQL","nosql",{"name":1304,"slug":1305,"type":15},"Rust","rust","2026-07-31T05:54:27.021432",{"slug":1308,"name":1308,"fn":1290,"description":1309,"org":1310,"tags":1311,"stars":1178,"repoUrl":1179,"updatedAt":1319},"azure-cosmos-ts","Azure Cosmos DB JavaScript\u002FTypeScript SDK (@azure\u002Fcosmos) for data plane operations. Use for CRUD operations on documents, queries, bulk operations, and container management. Triggers: \"Cosmos DB\", \"@azure\u002Fcosmos\", \"CosmosClient\", \"document CRUD\", \"NoSQL queries\", \"bulk operations\", \"partition key\", \"container.items\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1312,1313,1314,1315,1316],{"name":1295,"slug":1296,"type":15},{"name":1298,"slug":1299,"type":15},{"name":9,"slug":8,"type":15},{"name":1301,"slug":1302,"type":15},{"name":1317,"slug":1318,"type":15},"TypeScript","typescript","2026-07-03T16:31:19.368382",{"slug":1321,"name":1321,"fn":1322,"description":1323,"org":1324,"tags":1325,"stars":1178,"repoUrl":1179,"updatedAt":1331},"azure-data-tables-java","build table storage applications with Java","Build table storage applications with Azure Tables SDK for Java. Use when working with Azure Table Storage or Cosmos DB Table API for NoSQL key-value data, schemaless storage, or structured data at scale.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1326,1327,1328,1329,1330],{"name":1173,"slug":1174,"type":15},{"name":1295,"slug":1296,"type":15},{"name":1298,"slug":1299,"type":15},{"name":1195,"slug":1196,"type":15},{"name":1301,"slug":1302,"type":15},"2026-05-13T06:14:17.582229",267]