Arbeitsstand gesichert: Deploymentcenter-Integration (D-0 bis D-5) und Einfenster-Shell
Sicherungscommit vor dem Aufraeumen des Repos, damit nachvollziehbar bleibt, welcher Stand vor der Bereinigung galt. Build gruen, 476 Tests gruen. Zwei Straenge, die sich ueber .csproj, Program.cs und appsettings.json ueberschneiden und darum gemeinsam abgelegt werden: Deploymentcenter-Integration (P3c, Plan D-0 bis D-5 code-seitig fertig): - Deploymentcenter.Client 2.5.0 als lokales Paket, Source-Mapping erweitert - DeploymentcenterOptions, DeploymentcenterErrorReporter, LicenseGate/LicenseCli - WatchdogHeartbeatService auf die Deploymentcenter-API umgestellt (version, os, checks, metrics, status stopped) - Security: MasterKeyResolver, SecretRedactor, FilePermissions - Directory.Build.props mit zentraler Version 0.1.0 (Packager-Versionsdisziplin) - deploy/: Packager-Vorlage und systemd-Unit; echte Zugangsdaten bleiben ueber .gitignore aussen vor - setup.json fuer die Erstinstallation - UMSETZUNGSPLAN-Deploymentcenter-Integration.md; ANALYSE-Linux-Portierung.md verweist auf den neuen Plan Einfenster-Shell (UI-Redesign): - ShellWindow + ShellNavModel als Seitenleisten-Shell - WindowMenuBar und WindowMenuModel entfallen - Modul- und Kernfenster auf die Shell-Einbettung angepasst Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -3,71 +3,112 @@
|
||||
x:Class="PolyTrader.App.Avalonia.App">
|
||||
|
||||
<!--
|
||||
Farbschema. RequestedThemeVariant wird NICHT hier festgelegt, sondern beim Start vom
|
||||
ThemeManager aus den Server-Settings gesetzt (hell / dunkel / dem System folgen).
|
||||
Farbschema und Designsprache. RequestedThemeVariant wird NICHT hier festgelegt, sondern beim
|
||||
Start vom ThemeManager aus den Server-Settings gesetzt (hell / dunkel / dem System folgen).
|
||||
|
||||
Alle projekteigenen Farben stehen als Token in beiden Varianten. Im XAML werden sie über
|
||||
DynamicResource gebunden – dadurch wechseln sie beim Umschalten von selbst. Nur wenige
|
||||
Stellen setzen Farben im Code (Grid-Zeilen, Umschalter); die holen sie über
|
||||
ThemeManager.Brush(...) und zeichnen sich bei ThemeChanged neu.
|
||||
|
||||
Die Werte stammen aus dem Claude-Design-Mockup „PolyTrader UI Redesign" (Design-System
|
||||
„Industry"): gedämpftes Blaugrau als Akzent, papierne Grundfläche, Haarlinien statt Kästen,
|
||||
eckige Ecken. Farbmischungen des Mockups (color-mix) sind hier ausgerechnet, weil XAML
|
||||
keine Mischfunktion kennt.
|
||||
|
||||
Bewusste Abweichung: Das Mockup färbt Gewinne im Akzentblau. PolyTrader bleibt bei Grün/Rot
|
||||
für Gewinn/Verlust – die Bedeutungsfarbe ist im Handelskontext eingeführt und trägt weiter
|
||||
als eine reine Stilentscheidung. Die Töne sind aber an die neue Palette angeglichen
|
||||
(entsättigt statt Signalfarbe).
|
||||
-->
|
||||
<Application.Resources>
|
||||
<ResourceDictionary>
|
||||
|
||||
<!-- Schriften des Mockups. Avalonia probiert die Liste der Reihe nach durch: sind
|
||||
Barlow / Barlow Condensed lokal installiert, werden sie genommen, sonst fällt es
|
||||
auf die mitgelieferte Inter zurück. Damit läuft die App auch dort sauber, wo die
|
||||
Schriften fehlen (Linux-Zielsystem, Build-Server). -->
|
||||
<FontFamily x:Key="AppFontBody">Barlow, Inter, Segoe UI, sans-serif</FontFamily>
|
||||
<FontFamily x:Key="AppFontHeading">Barlow Condensed, Barlow, Inter, Segoe UI, sans-serif</FontFamily>
|
||||
<FontFamily x:Key="AppFontMono">Consolas, Menlo, DejaVu Sans Mono, monospace</FontFamily>
|
||||
|
||||
<ResourceDictionary.ThemeDictionaries>
|
||||
|
||||
<ResourceDictionary x:Key="Light">
|
||||
<!-- Flächen und Rahmen -->
|
||||
<SolidColorBrush x:Key="AppSurfaceBrush" Color="#FAFAFA" />
|
||||
<SolidColorBrush x:Key="AppSurfaceAltBrush" Color="#F3F3F3" />
|
||||
<SolidColorBrush x:Key="AppCardBrush" Color="#F5F5F5" />
|
||||
<SolidColorBrush x:Key="AppBorderBrush" Color="#DDDDDD" />
|
||||
<!-- Grundflächen und Rahmen -->
|
||||
<SolidColorBrush x:Key="AppBgBrush" Color="#F2F2F3" />
|
||||
<SolidColorBrush x:Key="AppSurfaceBrush" Color="#E9E9EA" />
|
||||
<SolidColorBrush x:Key="AppSurfaceAltBrush" Color="#EDEDEE" />
|
||||
<SolidColorBrush x:Key="AppCardBrush" Color="#E9E9EA" />
|
||||
<SolidColorBrush x:Key="AppBorderBrush" Color="#D0D0D1" />
|
||||
<SolidColorBrush x:Key="AppDividerBrush" Color="#D0D0D1" />
|
||||
<!-- Texte -->
|
||||
<SolidColorBrush x:Key="AppMutedTextBrush" Color="#777777" />
|
||||
<SolidColorBrush x:Key="AppCaptionTextBrush" Color="#666666" />
|
||||
<SolidColorBrush x:Key="AppReadOnlyTextBrush" Color="#444444" />
|
||||
<SolidColorBrush x:Key="AppTextBrush" Color="#1D1F20" />
|
||||
<SolidColorBrush x:Key="AppMutedTextBrush" Color="#76787A" />
|
||||
<SolidColorBrush x:Key="AppCaptionTextBrush" Color="#66686A" />
|
||||
<SolidColorBrush x:Key="AppReadOnlyTextBrush" Color="#444647" />
|
||||
<!-- Akzent -->
|
||||
<SolidColorBrush x:Key="AppAccentBrush" Color="#5980A6" />
|
||||
<SolidColorBrush x:Key="AppAccentAltBrush" Color="#728FAB" />
|
||||
<SolidColorBrush x:Key="AppAccentStrongBrush" Color="#416180" />
|
||||
<!-- Akzent 16 % auf der Grundfläche: Auswahl- und Aktiv-Hinterlegung -->
|
||||
<SolidColorBrush x:Key="AppAccentSoftBrush" Color="#DAE0E7" />
|
||||
<!-- Bedeutungsfarben -->
|
||||
<SolidColorBrush x:Key="AppPositiveBrush" Color="#2E7D32" />
|
||||
<SolidColorBrush x:Key="AppNegativeBrush" Color="#C62828" />
|
||||
<SolidColorBrush x:Key="AppWarningBrush" Color="#996600" />
|
||||
<!-- Zeilenfärbung der Trade-Listen (Pastell auf hellem Grund) -->
|
||||
<SolidColorBrush x:Key="AppTradeLossBrush" Color="#F5C8C8" />
|
||||
<SolidColorBrush x:Key="AppTradeSmallWinBrush" Color="#D4F0D4" />
|
||||
<SolidColorBrush x:Key="AppTradeBigWinBrush" Color="#8CD68C" />
|
||||
<SolidColorBrush x:Key="AppPositiveBrush" Color="#2F6B46" />
|
||||
<SolidColorBrush x:Key="AppNegativeBrush" Color="#8E3229" />
|
||||
<SolidColorBrush x:Key="AppWarningBrush" Color="#8A6420" />
|
||||
<!-- Benachrichtigungsleiste (Kante links + Symbol) -->
|
||||
<SolidColorBrush x:Key="AppNotifyWarnBrush" Color="#B5822A" />
|
||||
<SolidColorBrush x:Key="AppNotifyErrorBrush" Color="#C0392B" />
|
||||
<!-- Zeilenfärbung der Trade-Listen (gedämpft auf hellem Grund) -->
|
||||
<SolidColorBrush x:Key="AppTradeLossBrush" Color="#EFD4D0" />
|
||||
<SolidColorBrush x:Key="AppTradeSmallWinBrush" Color="#D8E7DC" />
|
||||
<SolidColorBrush x:Key="AppTradeBigWinBrush" Color="#A8CDB4" />
|
||||
<!-- Trading-Umschalter im Launcher -->
|
||||
<SolidColorBrush x:Key="AppToggleActiveBrush" Color="#90EE90" />
|
||||
<SolidColorBrush x:Key="AppToggleSellOnlyBrush" Color="#FFA500" />
|
||||
<SolidColorBrush x:Key="AppToggleInactiveBrush" Color="#CD5C5C" />
|
||||
<SolidColorBrush x:Key="AppToggleActiveBrush" Color="#A8CFAF" />
|
||||
<SolidColorBrush x:Key="AppToggleSellOnlyBrush" Color="#E0B26A" />
|
||||
<SolidColorBrush x:Key="AppToggleInactiveBrush" Color="#D89A92" />
|
||||
<!-- Supervisor-Analyseverlauf -->
|
||||
<SolidColorBrush x:Key="AppChatUserBrush" Color="#4682B4" />
|
||||
<SolidColorBrush x:Key="AppChatAgentBrush" Color="#2E8B57" />
|
||||
<SolidColorBrush x:Key="AppChatUserBrush" Color="#5980A6" />
|
||||
<SolidColorBrush x:Key="AppChatAgentBrush" Color="#4E8168" />
|
||||
</ResourceDictionary>
|
||||
|
||||
<ResourceDictionary x:Key="Dark">
|
||||
<!-- Flächen und Rahmen -->
|
||||
<SolidColorBrush x:Key="AppSurfaceBrush" Color="#2B2B2B" />
|
||||
<SolidColorBrush x:Key="AppSurfaceAltBrush" Color="#333333" />
|
||||
<SolidColorBrush x:Key="AppCardBrush" Color="#2F2F2F" />
|
||||
<SolidColorBrush x:Key="AppBorderBrush" Color="#484848" />
|
||||
<!-- Grundflächen und Rahmen -->
|
||||
<SolidColorBrush x:Key="AppBgBrush" Color="#1A1C1E" />
|
||||
<SolidColorBrush x:Key="AppSurfaceBrush" Color="#232527" />
|
||||
<SolidColorBrush x:Key="AppSurfaceAltBrush" Color="#1F2123" />
|
||||
<SolidColorBrush x:Key="AppCardBrush" Color="#232527" />
|
||||
<SolidColorBrush x:Key="AppBorderBrush" Color="#3C3E40" />
|
||||
<SolidColorBrush x:Key="AppDividerBrush" Color="#3C3E40" />
|
||||
<!-- Texte: heller, aber nicht reinweiß – sonst flimmert es auf Dunkel -->
|
||||
<SolidColorBrush x:Key="AppMutedTextBrush" Color="#9A9A9A" />
|
||||
<SolidColorBrush x:Key="AppCaptionTextBrush" Color="#AAAAAA" />
|
||||
<SolidColorBrush x:Key="AppReadOnlyTextBrush" Color="#CFCFCF" />
|
||||
<SolidColorBrush x:Key="AppTextBrush" Color="#EEF0F1" />
|
||||
<SolidColorBrush x:Key="AppMutedTextBrush" Color="#8D9092" />
|
||||
<SolidColorBrush x:Key="AppCaptionTextBrush" Color="#A2A5A7" />
|
||||
<SolidColorBrush x:Key="AppReadOnlyTextBrush" Color="#C9CCCE" />
|
||||
<!-- Akzent: auf Dunkel aufgehellt, damit der Kontrast trägt -->
|
||||
<SolidColorBrush x:Key="AppAccentBrush" Color="#7EA3C6" />
|
||||
<SolidColorBrush x:Key="AppAccentAltBrush" Color="#8FA8C2" />
|
||||
<SolidColorBrush x:Key="AppAccentStrongBrush" Color="#B5D9FD" />
|
||||
<SolidColorBrush x:Key="AppAccentSoftBrush" Color="#2A3239" />
|
||||
<!-- Bedeutungsfarben: gleiche Aussage, aufgehellt für Kontrast auf Dunkel -->
|
||||
<SolidColorBrush x:Key="AppPositiveBrush" Color="#81C784" />
|
||||
<SolidColorBrush x:Key="AppNegativeBrush" Color="#EF5350" />
|
||||
<SolidColorBrush x:Key="AppWarningBrush" Color="#FFB74D" />
|
||||
<SolidColorBrush x:Key="AppPositiveBrush" Color="#6FAE86" />
|
||||
<SolidColorBrush x:Key="AppNegativeBrush" Color="#D9756A" />
|
||||
<SolidColorBrush x:Key="AppWarningBrush" Color="#D3A45E" />
|
||||
<SolidColorBrush x:Key="AppNotifyWarnBrush" Color="#D3A45E" />
|
||||
<SolidColorBrush x:Key="AppNotifyErrorBrush" Color="#D9756A" />
|
||||
<!-- Zeilenfärbung: gedämpft statt pastell – die hellen Töne würden auf Dunkel
|
||||
blenden und den Text unlesbar machen. Reihenfolge der Aussage bleibt. -->
|
||||
<SolidColorBrush x:Key="AppTradeLossBrush" Color="#4E2A2A" />
|
||||
<SolidColorBrush x:Key="AppTradeSmallWinBrush" Color="#2C3F2C" />
|
||||
<SolidColorBrush x:Key="AppTradeBigWinBrush" Color="#3D6B3D" />
|
||||
<SolidColorBrush x:Key="AppTradeLossBrush" Color="#4A2B27" />
|
||||
<SolidColorBrush x:Key="AppTradeSmallWinBrush" Color="#2A3A30" />
|
||||
<SolidColorBrush x:Key="AppTradeBigWinBrush" Color="#3A5C46" />
|
||||
<!-- Trading-Umschalter -->
|
||||
<SolidColorBrush x:Key="AppToggleActiveBrush" Color="#3F7A3F" />
|
||||
<SolidColorBrush x:Key="AppToggleSellOnlyBrush" Color="#A76B1F" />
|
||||
<SolidColorBrush x:Key="AppToggleActiveBrush" Color="#3F7A55" />
|
||||
<SolidColorBrush x:Key="AppToggleSellOnlyBrush" Color="#9A6C25" />
|
||||
<SolidColorBrush x:Key="AppToggleInactiveBrush" Color="#8E3B3B" />
|
||||
<!-- Supervisor-Analyseverlauf -->
|
||||
<SolidColorBrush x:Key="AppChatUserBrush" Color="#7FB3D8" />
|
||||
<SolidColorBrush x:Key="AppChatAgentBrush" Color="#68B68A" />
|
||||
<SolidColorBrush x:Key="AppChatUserBrush" Color="#7EA3C6" />
|
||||
<SolidColorBrush x:Key="AppChatAgentBrush" Color="#78B49A" />
|
||||
</ResourceDictionary>
|
||||
|
||||
</ResourceDictionary.ThemeDictionaries>
|
||||
@@ -77,62 +118,275 @@
|
||||
<Application.Styles>
|
||||
<FluentTheme />
|
||||
|
||||
<!-- Projektweite Grundgestaltung. Bewusst hier zentral statt je Fenster wiederholt,
|
||||
damit alle Fenster gleich aussehen (wie zuvor die einheitliche Segoe-UI-Vorgabe). -->
|
||||
<Style Selector="DataGrid">
|
||||
<Setter Property="GridLinesVisibility" Value="Horizontal" />
|
||||
<Setter Property="HeadersVisibility" Value="Column" />
|
||||
<Setter Property="IsReadOnly" Value="True" />
|
||||
<Setter Property="CanUserResizeColumns" Value="True" />
|
||||
<Setter Property="CanUserSortColumns" Value="True" />
|
||||
<Setter Property="RowHeight" Value="24" />
|
||||
<Setter Property="FontSize" Value="12" />
|
||||
<!-- ═══ Grundgestaltung ═══════════════════════════════════════════════════════
|
||||
Projektweit zentral statt je Fenster wiederholt, damit alle Ansichten gleich
|
||||
aussehen. Die Designsprache des Mockups lebt fast vollständig hier. -->
|
||||
|
||||
<Style Selector="Window">
|
||||
<Setter Property="FontFamily" Value="{DynamicResource AppFontBody}" />
|
||||
<Setter Property="FontSize" Value="13" />
|
||||
<Setter Property="Background" Value="{DynamicResource AppBgBrush}" />
|
||||
<Setter Property="Foreground" Value="{DynamicResource AppTextBrush}" />
|
||||
</Style>
|
||||
|
||||
<!-- KPI-Kachel: entspricht den zweizeiligen Labels der WinForms-Oberfläche
|
||||
("<Titel> \n <Wert>"), siehe docs/UI-SPEZIFIKATION-WinForms.md. -->
|
||||
<Style Selector="Border.kpi">
|
||||
<Setter Property="Background" Value="{DynamicResource AppCardBrush}" />
|
||||
<Setter Property="BorderBrush" Value="{DynamicResource AppBorderBrush}" />
|
||||
<Setter Property="BorderThickness" Value="1" />
|
||||
<Setter Property="CornerRadius" Value="4" />
|
||||
<Setter Property="Padding" Value="12,8" />
|
||||
<Setter Property="Margin" Value="0,0,8,8" />
|
||||
<Setter Property="MinWidth" Value="150" />
|
||||
<!-- Überschriften laufen in der schmalen Schnittvariante (Barlow Condensed). -->
|
||||
<Style Selector="TextBlock.h4">
|
||||
<Setter Property="FontFamily" Value="{DynamicResource AppFontHeading}" />
|
||||
<Setter Property="FontSize" Value="19" />
|
||||
<Setter Property="FontWeight" Value="SemiBold" />
|
||||
</Style>
|
||||
<Style Selector="Border.kpi > StackPanel > TextBlock.caption">
|
||||
<Setter Property="FontSize" Value="11" />
|
||||
<Setter Property="Foreground" Value="{DynamicResource AppCaptionTextBrush}" />
|
||||
</Style>
|
||||
<Style Selector="Border.kpi > StackPanel > TextBlock.value">
|
||||
<Setter Property="FontSize" Value="18" />
|
||||
<Style Selector="TextBlock.h5">
|
||||
<Setter Property="FontFamily" Value="{DynamicResource AppFontHeading}" />
|
||||
<Setter Property="FontSize" Value="15" />
|
||||
<Setter Property="FontWeight" Value="SemiBold" />
|
||||
</Style>
|
||||
|
||||
<!-- Werkzeugleiste oben in jedem Fenster (Ersatz für ToolStrip). -->
|
||||
<Style Selector="Border.toolbar">
|
||||
<Setter Property="Background" Value="{DynamicResource AppSurfaceBrush}" />
|
||||
<Setter Property="BorderBrush" Value="{DynamicResource AppBorderBrush}" />
|
||||
<Setter Property="BorderThickness" Value="0,0,0,1" />
|
||||
<Setter Property="Padding" Value="6,4" />
|
||||
</Style>
|
||||
<Style Selector="Border.toolbar Button">
|
||||
<Setter Property="Margin" Value="0,0,6,0" />
|
||||
<Setter Property="Padding" Value="10,4" />
|
||||
</Style>
|
||||
|
||||
<!-- Statusleiste unten (Ersatz für StatusStrip). -->
|
||||
<Style Selector="Border.statusbar">
|
||||
<Setter Property="Background" Value="{DynamicResource AppSurfaceBrush}" />
|
||||
<Setter Property="BorderBrush" Value="{DynamicResource AppBorderBrush}" />
|
||||
<Setter Property="BorderThickness" Value="0,1,0,0" />
|
||||
<Setter Property="Padding" Value="8,4" />
|
||||
<!-- „Kicker": die kleine Versalzeile in Akzentfarbe über einer Überschrift.
|
||||
Avalonia kennt kein text-transform – die Texte stehen im XAML in Versalien. -->
|
||||
<Style Selector="TextBlock.kicker">
|
||||
<Setter Property="FontSize" Value="10" />
|
||||
<Setter Property="LetterSpacing" Value="1.2" />
|
||||
<Setter Property="Foreground" Value="{DynamicResource AppAccentBrush}" />
|
||||
</Style>
|
||||
|
||||
<!-- Gedämpfte Hinweistexte (Statuszeilen, Erklärungen unter Feldern). -->
|
||||
<Style Selector="TextBlock.muted">
|
||||
<Setter Property="Foreground" Value="{DynamicResource AppMutedTextBrush}" />
|
||||
</Style>
|
||||
|
||||
<Style Selector="TextBlock.mono, SelectableTextBlock.mono">
|
||||
<Setter Property="FontFamily" Value="{DynamicResource AppFontMono}" />
|
||||
</Style>
|
||||
|
||||
<!-- ═══ Steuerelemente: eckig und hairline ════════════════════════════════════
|
||||
Das Mockup setzt border-radius durchgängig auf 0 und zeichnet Kästen nur mit
|
||||
einer 1px-Linie. Fluent bringt gerundete, gefüllte Flächen mit – deshalb hier
|
||||
flächendeckend zurückgesetzt. -->
|
||||
|
||||
<Style Selector="Button">
|
||||
<Setter Property="CornerRadius" Value="0" />
|
||||
<Setter Property="FontFamily" Value="{DynamicResource AppFontHeading}" />
|
||||
<Setter Property="FontSize" Value="13" />
|
||||
<Setter Property="Padding" Value="10,5" />
|
||||
<Setter Property="Background" Value="Transparent" />
|
||||
<Setter Property="BorderBrush" Value="{DynamicResource AppDividerBrush}" />
|
||||
<Setter Property="BorderThickness" Value="1" />
|
||||
</Style>
|
||||
|
||||
<!-- Fluent malt Füllung und Rahmen im Vorlagenteil und überschreibt sie je Zustand.
|
||||
Deshalb müssen Schwebe- und Druckzustand dort gesetzt werden, sonst blitzt beim
|
||||
Überfahren wieder das Fluent-Grau durch. -->
|
||||
<Style Selector="Button /template/ ContentPresenter#PART_ContentPresenter">
|
||||
<Setter Property="CornerRadius" Value="0" />
|
||||
</Style>
|
||||
<Style Selector="Button:pointerover /template/ ContentPresenter#PART_ContentPresenter">
|
||||
<Setter Property="Background" Value="{DynamicResource AppSurfaceBrush}" />
|
||||
<Setter Property="BorderBrush" Value="{DynamicResource AppAccentBrush}" />
|
||||
</Style>
|
||||
<Style Selector="Button:pressed /template/ ContentPresenter#PART_ContentPresenter">
|
||||
<Setter Property="Background" Value="{DynamicResource AppAccentSoftBrush}" />
|
||||
<Setter Property="BorderBrush" Value="{DynamicResource AppAccentBrush}" />
|
||||
</Style>
|
||||
|
||||
<!-- Hauptaktion: gefüllt im Akzent. -->
|
||||
<Style Selector="Button.primary">
|
||||
<Setter Property="Foreground" Value="{DynamicResource AppBgBrush}" />
|
||||
</Style>
|
||||
<Style Selector="Button.primary /template/ ContentPresenter#PART_ContentPresenter">
|
||||
<Setter Property="Background" Value="{DynamicResource AppAccentBrush}" />
|
||||
<Setter Property="BorderBrush" Value="{DynamicResource AppAccentBrush}" />
|
||||
</Style>
|
||||
<Style Selector="Button.primary:pointerover /template/ ContentPresenter#PART_ContentPresenter">
|
||||
<Setter Property="Background" Value="{DynamicResource AppAccentStrongBrush}" />
|
||||
<Setter Property="BorderBrush" Value="{DynamicResource AppAccentStrongBrush}" />
|
||||
</Style>
|
||||
|
||||
<!-- Rahmenlose Schaltfläche (Seitenleiste, Symbolknöpfe). -->
|
||||
<Style Selector="Button.ghost">
|
||||
<Setter Property="BorderThickness" Value="0" />
|
||||
<Setter Property="Background" Value="Transparent" />
|
||||
</Style>
|
||||
<Style Selector="Button.ghost:pointerover /template/ ContentPresenter#PART_ContentPresenter">
|
||||
<Setter Property="Background" Value="{DynamicResource AppAccentSoftBrush}" />
|
||||
<Setter Property="BorderBrush" Value="Transparent" />
|
||||
</Style>
|
||||
|
||||
<Style Selector="TextBox, ComboBox, NumericUpDown, CalendarDatePicker, AutoCompleteBox">
|
||||
<Setter Property="CornerRadius" Value="0" />
|
||||
<Setter Property="FontFamily" Value="{DynamicResource AppFontBody}" />
|
||||
<Setter Property="MinHeight" Value="30" />
|
||||
</Style>
|
||||
|
||||
<Style Selector="CheckBox, RadioButton">
|
||||
<Setter Property="FontFamily" Value="{DynamicResource AppFontBody}" />
|
||||
</Style>
|
||||
|
||||
<Style Selector="TabItem">
|
||||
<Setter Property="FontFamily" Value="{DynamicResource AppFontHeading}" />
|
||||
<Setter Property="FontSize" Value="15" />
|
||||
<Setter Property="MinHeight" Value="38" />
|
||||
</Style>
|
||||
|
||||
<!-- ═══ Tabellen ══════════════════════════════════════════════════════════════
|
||||
Kopfzeile klein, gesperrt und gedämpft; Zeilen nur durch eine Haarlinie
|
||||
getrennt (keine Gitterkästen). -->
|
||||
<Style Selector="DataGrid">
|
||||
<Setter Property="GridLinesVisibility" Value="Horizontal" />
|
||||
<Setter Property="HeadersVisibility" Value="Column" />
|
||||
<Setter Property="IsReadOnly" Value="True" />
|
||||
<Setter Property="CanUserResizeColumns" Value="True" />
|
||||
<Setter Property="CanUserSortColumns" Value="True" />
|
||||
<Setter Property="RowHeight" Value="26" />
|
||||
<Setter Property="FontSize" Value="12.5" />
|
||||
<Setter Property="Background" Value="Transparent" />
|
||||
<Setter Property="BorderThickness" Value="0" />
|
||||
<Setter Property="HorizontalGridLinesBrush" Value="{DynamicResource AppDividerBrush}" />
|
||||
</Style>
|
||||
<Style Selector="DataGridColumnHeader">
|
||||
<!-- Kein LetterSpacing: DataGridColumnHeader ist ein ContentControl und kennt die
|
||||
Eigenschaft nicht (nur TextBlock hat sie). Die Sperrung der Mockup-Kopfzeile
|
||||
entfällt hier deshalb bewusst. -->
|
||||
<Setter Property="FontSize" Value="10.5" />
|
||||
<Setter Property="FontWeight" Value="Normal" />
|
||||
<Setter Property="Foreground" Value="{DynamicResource AppMutedTextBrush}" />
|
||||
<Setter Property="Background" Value="Transparent" />
|
||||
<Setter Property="BorderBrush" Value="{DynamicResource AppDividerBrush}" />
|
||||
<Setter Property="BorderThickness" Value="0,0,0,1" />
|
||||
<Setter Property="Padding" Value="7,5" />
|
||||
</Style>
|
||||
|
||||
<!-- ═══ Bausteine ═════════════════════════════════════════════════════════════ -->
|
||||
|
||||
<!-- KPI-Kachel: entspricht den zweizeiligen Labels der WinForms-Oberfläche
|
||||
("<Titel> \n <Wert>"), siehe docs/UI-SPEZIFIKATION-WinForms.md. -->
|
||||
<Style Selector="Border.kpi">
|
||||
<Setter Property="Background" Value="Transparent" />
|
||||
<Setter Property="BorderBrush" Value="{DynamicResource AppDividerBrush}" />
|
||||
<Setter Property="BorderThickness" Value="1" />
|
||||
<Setter Property="CornerRadius" Value="0" />
|
||||
<Setter Property="Padding" Value="12,10" />
|
||||
<Setter Property="Margin" Value="0,0,10,10" />
|
||||
<Setter Property="MinWidth" Value="160" />
|
||||
</Style>
|
||||
<Style Selector="Border.kpi > StackPanel > TextBlock.caption">
|
||||
<Setter Property="FontSize" Value="10" />
|
||||
<Setter Property="LetterSpacing" Value="1.2" />
|
||||
<Setter Property="Foreground" Value="{DynamicResource AppAccentBrush}" />
|
||||
</Style>
|
||||
<Style Selector="Border.kpi > StackPanel > TextBlock.value">
|
||||
<Setter Property="FontFamily" Value="{DynamicResource AppFontHeading}" />
|
||||
<Setter Property="FontSize" Value="18" />
|
||||
<Setter Property="FontWeight" Value="SemiBold" />
|
||||
</Style>
|
||||
|
||||
<!-- Allgemeiner Rahmen-Kasten (Detailbereiche, Log-Fläche). -->
|
||||
<Style Selector="Border.card">
|
||||
<Setter Property="Background" Value="Transparent" />
|
||||
<Setter Property="BorderBrush" Value="{DynamicResource AppDividerBrush}" />
|
||||
<Setter Property="BorderThickness" Value="1" />
|
||||
<Setter Property="CornerRadius" Value="0" />
|
||||
<Setter Property="Padding" Value="12" />
|
||||
</Style>
|
||||
|
||||
<!-- Statuskennzeichen in Listen und Kopfzeilen. -->
|
||||
<Style Selector="Border.tag">
|
||||
<Setter Property="Background" Value="{DynamicResource AppAccentSoftBrush}" />
|
||||
<Setter Property="CornerRadius" Value="0" />
|
||||
<Setter Property="Padding" Value="8,2" />
|
||||
</Style>
|
||||
|
||||
<!-- Werkzeugleiste oben in jeder Ansicht (Ersatz für ToolStrip). Im neuen Design
|
||||
ohne Füllfläche – nur die Schaltflächen stehen auf dem Grund. -->
|
||||
<Style Selector="Border.toolbar">
|
||||
<Setter Property="Background" Value="Transparent" />
|
||||
<Setter Property="BorderBrush" Value="{DynamicResource AppDividerBrush}" />
|
||||
<Setter Property="BorderThickness" Value="0,0,0,1" />
|
||||
<Setter Property="Padding" Value="0,0,0,10" />
|
||||
</Style>
|
||||
<Style Selector="Border.toolbar Button">
|
||||
<Setter Property="Margin" Value="0,0,6,0" />
|
||||
<Setter Property="Padding" Value="10,5" />
|
||||
<Setter Property="FontSize" Value="12.5" />
|
||||
</Style>
|
||||
|
||||
<!-- Statusleiste unten (Ersatz für StatusStrip). -->
|
||||
<Style Selector="Border.statusbar">
|
||||
<Setter Property="Background" Value="Transparent" />
|
||||
<Setter Property="BorderBrush" Value="{DynamicResource AppDividerBrush}" />
|
||||
<Setter Property="BorderThickness" Value="0,1,0,0" />
|
||||
<Setter Property="Padding" Value="20,5" />
|
||||
</Style>
|
||||
<Style Selector="Border.statusbar TextBlock">
|
||||
<Setter Property="FontSize" Value="11.5" />
|
||||
<Setter Property="Foreground" Value="{DynamicResource AppMutedTextBrush}" />
|
||||
<Setter Property="VerticalAlignment" Value="Center" />
|
||||
</Style>
|
||||
|
||||
<!-- Senkrechter Trenner in Werkzeugleisten. -->
|
||||
<Style Selector="Border.sep">
|
||||
<Setter Property="Width" Value="1" />
|
||||
<Setter Property="Height" Value="18" />
|
||||
<Setter Property="Margin" Value="4,0,10,0" />
|
||||
<Setter Property="Background" Value="{DynamicResource AppDividerBrush}" />
|
||||
</Style>
|
||||
|
||||
<!-- Gruppenkasten (Launcher-Widgets). Überschrift wie ein Kicker gesetzt. -->
|
||||
<Style Selector="HeaderedContentControl">
|
||||
<Setter Property="FontFamily" Value="{DynamicResource AppFontHeading}" />
|
||||
<Setter Property="FontSize" Value="15" />
|
||||
</Style>
|
||||
|
||||
<Style Selector="GridSplitter">
|
||||
<Setter Property="Background" Value="{DynamicResource AppDividerBrush}" />
|
||||
</Style>
|
||||
|
||||
<!-- ═══ Seitenleiste der Shell ════════════════════════════════════════════════ -->
|
||||
|
||||
<Style Selector="Button.nav">
|
||||
<Setter Property="BorderThickness" Value="0" />
|
||||
<Setter Property="Background" Value="Transparent" />
|
||||
<Setter Property="HorizontalAlignment" Value="Stretch" />
|
||||
<Setter Property="HorizontalContentAlignment" Value="Left" />
|
||||
<Setter Property="Padding" Value="9,7" />
|
||||
<Setter Property="FontFamily" Value="{DynamicResource AppFontBody}" />
|
||||
<Setter Property="FontSize" Value="13" />
|
||||
</Style>
|
||||
<!-- Eingeklappt steht nur das Symbol da – dann mittig statt links. -->
|
||||
<Style Selector="Button.nav.icononly">
|
||||
<Setter Property="HorizontalContentAlignment" Value="Center" />
|
||||
</Style>
|
||||
<Style Selector="Button.nav.active">
|
||||
<Setter Property="Foreground" Value="{DynamicResource AppAccentBrush}" />
|
||||
<Setter Property="FontWeight" Value="SemiBold" />
|
||||
</Style>
|
||||
<Style Selector="Button.nav.active /template/ ContentPresenter#PART_ContentPresenter">
|
||||
<Setter Property="Background" Value="{DynamicResource AppAccentSoftBrush}" />
|
||||
<Setter Property="BorderBrush" Value="Transparent" />
|
||||
</Style>
|
||||
<Style Selector="Button.nav:pointerover /template/ ContentPresenter#PART_ContentPresenter">
|
||||
<Setter Property="Background" Value="{DynamicResource AppAccentSoftBrush}" />
|
||||
<Setter Property="BorderBrush" Value="Transparent" />
|
||||
</Style>
|
||||
|
||||
<!-- Abschnittsüberschrift in der Seitenleiste. -->
|
||||
<Style Selector="TextBlock.navgroup">
|
||||
<Setter Property="FontSize" Value="10" />
|
||||
<Setter Property="LetterSpacing" Value="1.4" />
|
||||
<Setter Property="Margin" Value="9,0,0,6" />
|
||||
<Setter Property="Foreground" Value="{DynamicResource AppMutedTextBrush}" />
|
||||
</Style>
|
||||
|
||||
<!-- ═══ Benachrichtigungsleiste ═══════════════════════════════════════════════
|
||||
Farbige Kante links, sonst nur eine gedämpfte Bandfläche – wie im Mockup. -->
|
||||
<Style Selector="Border.notify">
|
||||
<Setter Property="Background" Value="{DynamicResource AppSurfaceBrush}" />
|
||||
<Setter Property="BorderBrush" Value="{DynamicResource AppNotifyWarnBrush}" />
|
||||
<Setter Property="BorderThickness" Value="3,0,0,0" />
|
||||
<Setter Property="Padding" Value="17,6" />
|
||||
</Style>
|
||||
<Style Selector="Border.notify.error">
|
||||
<Setter Property="BorderBrush" Value="{DynamicResource AppNotifyErrorBrush}" />
|
||||
</Style>
|
||||
</Application.Styles>
|
||||
|
||||
</Application>
|
||||
|
||||
Reference in New Issue
Block a user