Skill page Desktop v1.0.1

WinUI 3 and Windows App SDK

Build or review WinUI 3 applications with the Windows App SDK, including MVVM patterns, packaging decisions, navigation, theming, windowing, and interop boundaries with other .NET stacks. Use when building modern Windows-native desktop UI.

Trigger On

  • building native modern Windows desktop UI on WinUI 3
  • integrating Windows App SDK features into a .NET app
  • deciding between WinUI, WPF, WinForms, and MAUI for Windows work
  • implementing MVVM patterns in Windows App SDK applications

Workflow

  1. Confirm WinUI is the right choice — use when modern Windows-native UI, Fluent Design, and Windows App SDK capabilities are needed. For cross-platform, consider MAUI instead.
  2. Choose packaging model early — packaged (MSIX) vs unpackaged differ materially for deployment, identity, and API access:

``xml <!-- Unpackaged: add to .csproj --> <WindowsPackageType>None</WindowsPackageType> ``

  1. Apply MVVM pattern with the MVVM Toolkit — keep views dumb, logic in ViewModels:

```csharp public partial class ProductsViewModel : ObservableObject { [ObservableProperty] private ObservableCollection<Product> _products = [];

[ObservableProperty] [NotifyCanExecuteChangedFor(nameof(DeleteCommand))] private Product? _selectedProduct;

[RelayCommand(CanExecute = nameof(CanDelete))] private async Task DeleteAsync() { if (SelectedProduct is null) return; await _productService.DeleteAsync(SelectedProduct.Id); Products.Remove(SelectedProduct); } private bool CanDelete() => SelectedProduct is not null; } ```

  1. Use x:Bind for compiled bindings — better performance and compile-time checking than {Binding}:

``xml <TextBlock Text="{x:Bind ViewModel.Title, Mode=OneWay}"/> ``

  1. Wire DI through `Host.CreateDefaultBuilder` — register services, ViewModels, and views. Resolve via App.GetService<T>().
  2. Implement navigation service — map ViewModels to Pages by convention. See references/patterns.md for the full pattern.
  3. Handle Windows App SDK features — windowing (AppWindow), custom title bar, app lifecycle, notifications.
  4. Always set `XamlRoot` when showing ContentDialog — omitting this causes silent failures.
  5. Validate on Windows targets — behavior depends on runtime, packaging model, and Windows version.
flowchart LR
  A["Choose WinUI"] --> B["Select packaging model"]
  B --> C["MVVM + DI setup"]
  C --> D["Navigation and views"]
  D --> E["Windows App SDK features"]
  E --> F["Validate on target runtime"]

Deliver

  • modern Windows UI code with clear platform boundaries
  • explicit deployment and packaging assumptions
  • MVVM pattern with testable ViewModels
  • cleaner interop between shared and Windows-specific layers

Validate

  • WinUI is chosen for a real product reason, not defaulted to
  • Windows App SDK dependencies are explicit in the project file
  • packaging and runtime assumptions are tested on target
  • x:Bind is used for compiled bindings throughout
  • navigation and ContentDialog both work with correct XamlRoot
  • custom title bar renders correctly on Windows 10 and 11

References

Related skills

Skill

LibVLC Skill

v1.0.0

Expert knowledge of the libvlc C API (3.x and 4.x), the multimedia framework behind VLC media player.

dotnet skills install libvlc
v1.0.1

Build, maintain, or modernize Windows Forms applications with practical guidance on designer-driven UI, event handling, data binding, MVP separation, and migration to modern .NET.

dotnet skills install winforms
Skill

WPF

v1.0.0

Build and modernize WPF applications on .NET with correct XAML, data binding, commands, threading, styling, and Windows desktop migration decisions.

dotnet skills install wpf