fix(layout): enforce 1px inner inset for rounded frame

This commit is contained in:
Meik
2026-03-05 16:54:03 +01:00
parent 0b4f5f3d70
commit d411f23fc4
3 changed files with 5 additions and 16 deletions

View File

@@ -10,7 +10,7 @@
- Hauptlayout von festen `Window.ActualWidth`-Bindings entkoppelt, damit Header/Content nicht über die gerundete Innenfläche hinausragen. - 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. - 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. - 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 inneren Content-Clip um die Border-Stärke nach innen versetzt und den Body-Host per Geometrie mit gerundeten unteren Ecken 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 und den Body-Host per Geometrie mit zum Innenradius passenden gerundeten unteren Ecken 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. - 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 ### Navigation und Interaktion

View File

@@ -361,7 +361,8 @@
Background="{DynamicResource backgroundColor}" Background="{DynamicResource backgroundColor}"
SnapsToDevicePixels="True" SnapsToDevicePixels="True"
ClipToBounds="True"> ClipToBounds="True">
<Grid x:Name="MainWindowContentRoot"> <Grid x:Name="MainWindowContentRoot"
Margin="1">
<DockPanel x:Name="MainDock" <DockPanel x:Name="MainDock"
Background="{DynamicResource headerColor}"> Background="{DynamicResource headerColor}">
<Grid DockPanel.Dock="Top" <Grid DockPanel.Dock="Top"

View File

@@ -2184,28 +2184,16 @@ namespace C4IT_CustomerPanel
const double surfaceRadius = 20d; const double surfaceRadius = 20d;
const double contentRadius = 19d; const double contentRadius = 19d;
double contentInset = Math.Max(0d, MainWindowSurface.BorderThickness.Left);
MainGrid.Clip = null; MainGrid.Clip = null;
this.Clip = null; this.Clip = null;
MainWindowSurface.Clip = new RectangleGeometry(new Rect(0d, 0d, surfaceWidth, surfaceHeight), surfaceRadius, surfaceRadius); MainWindowSurface.Clip = new RectangleGeometry(new Rect(0d, 0d, surfaceWidth, surfaceHeight), surfaceRadius, surfaceRadius);
MainWindowContentRoot.Clip = new RectangleGeometry(new Rect(0d, 0d, contentWidth, contentHeight), contentRadius, contentRadius);
double clippedContentWidth = Math.Max(0d, contentWidth - (contentInset * 2d));
double clippedContentHeight = Math.Max(0d, contentHeight - (contentInset * 2d));
double clippedContentRadius = Math.Max(0d, contentRadius - contentInset);
if (clippedContentWidth > 0d && clippedContentHeight > 0d)
{
MainWindowContentRoot.Clip = new RectangleGeometry(
new Rect(contentInset, contentInset, clippedContentWidth, clippedContentHeight),
clippedContentRadius,
clippedContentRadius);
}
if (btnSP != null && btnSP.ActualWidth > 0d && btnSP.ActualHeight > 0d) if (btnSP != null && btnSP.ActualWidth > 0d && btnSP.ActualHeight > 0d)
{ {
btnSP.Clip = CreateBottomRoundedRectGeometry(btnSP.ActualWidth, btnSP.ActualHeight, surfaceRadius); btnSP.Clip = CreateBottomRoundedRectGeometry(btnSP.ActualWidth, btnSP.ActualHeight, contentRadius);
} }
_mainSurfaceClipInitialized = true; _mainSurfaceClipInitialized = true;