From da71e3b7bb4044140f560c09428058935f89d3a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= <1005065+DeepDiver1975@users.noreply.github.com> Date: Mon, 31 Aug 2026 17:31:13 +0200 Subject: [PATCH] fix(ui): make the module tab strip a scrollable single column MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Root cause (systematic-debugging, reported live with a screenshot on a "relative small screen"): TabControl's TabStripPlacement="Left" (the "dispatch sidebar" rail — Theme/Styles.axaml) used Avalonia's default items panel, a vertically-oriented WrapPanel. Once the rail ran out of height for all 11 fixed-MinHeight-50 TabItems, it wrapped into a second column starting back at the top — WASSERFÖRDERUNG rendered directly beside AUFBAU, ABBAU beside ETB, exactly as reported. Forcing a single-column StackPanel alone wasn't enough: confirmed via a headless test that Avalonia's default template has no ScrollViewer around PART_ItemsPresenter at all, so without wrapping the last tabs would have simply been clipped off the bottom edge with no way to reach them — the same class of bug as the earlier Wasserförderung map zoom/pan dead-end, just in the navigation rail instead. Fix: replace TabControl's template with a small purpose-built one (this app only ever uses TabStripPlacement="Left", so no need to handle other placements) — a single-column ItemsPresenter wrapped in its own ScrollViewer beside the content host, instead of patching Avalonia's default template. Verified headlessly: at a window short enough that the rail genuinely needs it, all tabs stay in one column (monotonically increasing Y) and the last tab (ABBAU) is reachable by scrolling the rail into view. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01UwN31QccH98YV9eEc2bue2 Signed-off-by: Thomas Müller <1005065+DeepDiver1975@users.noreply.github.com> --- src/LageBuch.App.Shared/Theme/Styles.axaml | 27 +++++++ .../ModuleTabStripLayoutTests.cs | 81 +++++++++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 tests/LageBuch.Acceptance.Tests/ModuleTabStripLayoutTests.cs diff --git a/src/LageBuch.App.Shared/Theme/Styles.axaml b/src/LageBuch.App.Shared/Theme/Styles.axaml index 56cfeb6..0a12ba3 100644 --- a/src/LageBuch.App.Shared/Theme/Styles.axaml +++ b/src/LageBuch.App.Shared/Theme/Styles.axaml @@ -283,6 +283,33 @@