From a33f80d345626f7a5c6817b5b473cb1cddd3b6c4 Mon Sep 17 00:00:00 2001 From: Zac Gaetano Date: Wed, 13 May 2026 00:41:49 -0400 Subject: [PATCH] =?UTF-8?q?feat(winui3):=20WinUI=203=20host=20LAUNCHES=20?= =?UTF-8?q?=E2=80=94=20verified=20rendering=20on=20Windows?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Removing the inline-hosted SettingsDrawer (and its accompanying Storyboard resources targeting TranslateTransform.X) unblocks the launch. The WinUI 3 host now opens, paints, and stays alive. Verified via screenshot: * 64px left rail with Wild Dragon "W" brand mark + participants / Teams / hide-Teams / settings / engine-status puck buttons (Segoe Fluent Icons throughout, uniform stroke) * 44px custom title bar with the live pills inline (live · session timer · REC count · disk free) and a theme toggle to the left of the system min/max/close * Section header: "Participants 4" + filter input + Refresh + Presets + the single cyan Primary CTA "Enable all online" * Participants list placeholder ("View-model wiring queued for the next session") in the hero row — real DataGrid + bindings land in Phase 4/5 of the migration plan * Conditional in-call control bar: Muted (destructive coral) + Camera/Share/Marker (Secondary) + Leave (destructive coral) + overflow kebab * Slim status bar: control-surface URL + keyboard shortcut hints * Rendered in LIGHT THEME on first run (matched the OS app-mode setting via ThemeManager.ResolveTheme), confirming the ThemeDictionary swap works end-to-end Two open suspects causing the SettingsDrawer host to crash WinUI 3's XAML parser with HR=0x802b000a (XAML_E_PARSER_GENERAL_ERROR): * RenderTransform with a x:Name'd TranslateTransform — WinUI 3 might not allow naming transforms inside RenderTransform the way WPF does * Storyboard.TargetName pointing at the named transform — WinUI 3 Storyboards have stricter resolution The drawer XAML itself (Views/SettingsDrawer.xaml + .cs) is unchanged and ships alongside this commit. Re-host it in MainWindow.xaml once the parse error is triaged (likely fix: replace TranslateTransform.X animation with the AppWindow composition API or use the CompositionTarget approach instead of a Storyboard). The migration plan's Phase 3 is now substantially CLOSED — the WindowsAppSDK activation blocker is resolved (1.8 DDLM swap). Next session opens with Phase 4 (view-model wiring) plus the SettingsDrawer re-host triage. --- src/TeamsISO.App.WinUI/Views/MainWindow.xaml | 42 ++++--------------- .../Views/MainWindow.xaml.cs | 42 ++----------------- 2 files changed, 12 insertions(+), 72 deletions(-) diff --git a/src/TeamsISO.App.WinUI/Views/MainWindow.xaml b/src/TeamsISO.App.WinUI/Views/MainWindow.xaml index d05a4ef..4f863c9 100644 --- a/src/TeamsISO.App.WinUI/Views/MainWindow.xaml +++ b/src/TeamsISO.App.WinUI/Views/MainWindow.xaml @@ -33,29 +33,9 @@ - - - - - - - - - - - - - - - - - + + - - - - - - + - /// Toggle the settings drawer with a slide animation. The drawer is - /// pre-translated 400px off the right edge in XAML; the storyboard - /// animates X back to 0 to slide it in. Hit-testing is gated so the - /// off-screen drawer doesn't intercept clicks on the participants list. + /// Drawer toggle stubbed pending XAML-parse-error triage. The + /// SettingsDrawer XAML itself builds clean and is hosted inline once + /// the launch crash is resolved (see Phase 3 of the migration plan). /// private void OnSettingsClick(object sender, RoutedEventArgs e) { - if (_drawerOpen) - { - CloseDrawer(); - } - else - { - OpenDrawer(); - } + // No-op stub until SettingsDrawerHost re-hosts in MainWindow.xaml. } - private void OpenDrawer() - { - if (_drawerOpen) return; - _drawerOpen = true; - SettingsDrawerHost.IsHitTestVisible = true; - var sb = (Microsoft.UI.Xaml.Media.Animation.Storyboard)((Microsoft.UI.Xaml.Controls.Grid)Content) - .Resources["DrawerSlideIn"]; - sb.Begin(); - SettingsDrawerHost.CloseRequested -= OnDrawerCloseRequested; - SettingsDrawerHost.CloseRequested += OnDrawerCloseRequested; - } - - private void CloseDrawer() - { - if (!_drawerOpen) return; - _drawerOpen = false; - var sb = (Microsoft.UI.Xaml.Media.Animation.Storyboard)((Microsoft.UI.Xaml.Controls.Grid)Content) - .Resources["DrawerSlideOut"]; - sb.Completed += (_, _) => SettingsDrawerHost.IsHitTestVisible = false; - sb.Begin(); - } - - private void OnDrawerCloseRequested(object? sender, System.EventArgs e) => CloseDrawer(); - /// /// Push a resolved theme to the visual tree and to the AppWindow /// title-bar buttons. Called on every