diff --git a/Changelog.md b/Changelog.md index 364ad00..225a239 100644 --- a/Changelog.md +++ b/Changelog.md @@ -10,7 +10,7 @@ - Hauptlayout von festen `Window.ActualWidth`-Bindings entkoppelt, damit Header/Content nicht über die gerundete Innenfläche hinausragen. - Feste Hauptlayout-Höhen (Navigation/Content) auf die verfügbare Innenhöhe abgestimmt und Clipping im Dock-Bereich aktiviert, damit keine Inhalte in die Rundungsbereiche überlaufen. - Initialisierung des Rounded-Clips auf den finalen Layout-Zeitpunkt erweitert (Loaded/Render), damit die Rundungsbegrenzung stabil greift. -- MainWindow-Ecküberstände beseitigt: Navigation-Rail unten links an den Fensterradius angepasst, Content-Bereich im `DockPanel` als Fill-Element geführt, zusätzlicher Surface-Clip auf Radius `20` gesetzt, den gesamten `MainWindowContentRoot` als konstanten `1px`-Inset innerhalb des Rahmens geführt, den Body-Host per Geometrie mit zum Innenradius passenden gerundeten unteren Ecken begrenzt, eine On-Top-Corner-Maske (`Rectangle - RoundedRectangle`) ergänzt und zusätzlich per Win32-Window-Region (`SetWindowRgn`) die Fensterkontur selbst auf Rundung begrenzt (WPF-Typen für Geometriepunkte/-größen explizit qualifiziert, um Mehrdeutigkeiten mit `System.Drawing` zu vermeiden). +- MainWindow-Ecküberstände beseitigt: Navigation-Rail unten links an den Fensterradius angepasst, Content-Bereich im `DockPanel` als Fill-Element geführt, zusätzlicher Surface-Clip auf Radius `20` gesetzt, den gesamten `MainWindowContentRoot` als konstanten `1px`-Inset innerhalb des Rahmens geführt, den Body-Host per Geometrie mit zum Innenradius passenden gerundeten unteren Ecken begrenzt, eine On-Top-Corner-Maske (`Rectangle - RoundedRectangle`) ergänzt, eine explizite On-Top-Rahmenkontur als `Path` ergänzt und zusätzlich per Win32-Window-Region (`SetWindowRgn`) die Fensterkontur selbst auf Rundung begrenzt (WPF-Typen für Geometriepunkte/-größen explizit qualifiziert, um Mehrdeutigkeiten mit `System.Drawing` zu vermeiden). - Sichtbarkeit des Main-Contents wiederhergestellt: Navigations-/Content-Host auf feste Breitenaufteilung (`75 + 425`) umgestellt, damit das Inhaltspanel nicht mehr durch einen Zero-Width-Viewport abgeschnitten wird. ### Navigation und Interaktion diff --git a/MainWindow.xaml b/MainWindow.xaml index 7fe7143..813f664 100644 --- a/MainWindow.xaml +++ b/MainWindow.xaml @@ -357,7 +357,7 @@ @@ -1011,6 +1011,15 @@ Fill="{DynamicResource backgroundColor}" IsHitTestVisible="False" SnapsToDevicePixels="True" /> + diff --git a/MainWindow.xaml.cs b/MainWindow.xaml.cs index 60f6cc2..7e41f2e 100644 --- a/MainWindow.xaml.cs +++ b/MainWindow.xaml.cs @@ -2211,6 +2211,11 @@ namespace C4IT_CustomerPanel MainWindowCornerMaskOverlay.Data = CreateCornerOverflowMaskGeometry(surfaceWidth, surfaceHeight, surfaceRadius); } + if (MainWindowFrameOverlay != null) + { + MainWindowFrameOverlay.Data = CreateFrameOverlayGeometry(surfaceWidth, surfaceHeight, surfaceRadius, 1d); + } + if (btnSP != null && btnSP.ActualWidth > 0d && btnSP.ActualHeight > 0d) { btnSP.Clip = CreateBottomRoundedRectGeometry(btnSP.ActualWidth, btnSP.ActualHeight, contentRadius); @@ -2260,6 +2265,23 @@ namespace C4IT_CustomerPanel return mask; } + private static Geometry CreateFrameOverlayGeometry(double width, double height, double radius, double strokeThickness) + { + if (width <= 0d || height <= 0d) + return Geometry.Empty; + + double inset = Math.Max(0d, strokeThickness / 2d); + double frameWidth = Math.Max(0d, width - strokeThickness); + double frameHeight = Math.Max(0d, height - strokeThickness); + if (frameWidth <= 0d || frameHeight <= 0d) + return Geometry.Empty; + + double frameRadius = Math.Max(0d, Math.Min(radius - inset, Math.Min(frameWidth / 2d, frameHeight / 2d))); + var frame = new RectangleGeometry(new Rect(inset, inset, frameWidth, frameHeight), frameRadius, frameRadius); + frame.Freeze(); + return frame; + } + private void ApplyRoundedWindowRegion() { if (!IsLoaded || WindowState == WindowState.Minimized)