Das Suffix ".Avalonia" gab es nur, weil daneben ein WinForms-IBKRTrader.App
stand. Das ist seit L5 weg, also faellt auch das Suffix. Git erkennt alle
Dateien als Umbenennung; Assembly, Wurzel-Namensraum und die
avares://-Ressourcen-URI sind mitgezogen.
Nebeneffekt der Umbenennung: die global::Avalonia-Qualifizierungen entfallen.
Sie waren noetig, weil der Namensraum IBKRTrader.App.Avalonia das
Avalonia-Paket verdeckt hat - ein Ueberbleibsel genau der Namensgebung, die
jetzt weg ist.
Inhaltlich falsch gewordene Aussagen berichtigt - das waren die eigentlichen
Ueberbleibsel, nicht die Kommentare:
- .agents/rules/grundregeln.md schrieb weiterhin "C# .NET 10 WinForms",
RichTextBox-Logging, LauncherForm und PropertyGrid vor. Das ist die Regel,
nach der kuenftig gearbeitet wird - sie haette die Portierung Stueck fuer
Stueck rueckgaengig gemacht. Jetzt: Avalonia, keine Plattform-Suffixe, die
11er-Pinnung mit Begruendung, dazu die beiden Regeln, die uns in L1b am
meisten gekostet haben (UTC persistieren + AppTimeZone statt DateTime.Now;
jede Formatierung mit ausdruecklichem IFormatProvider).
- Core: LogEntry ("wird in RichTextBox geschrieben"), IWorker/WorkerEngine/
WorkerInfo ("DataGridView-Zeile"/"-Binding"), ModuleView ("die
WinForms-Shell castet auf Form").
- Doku: ARCHITECTURE (Modul-Ui-Ordner, "designbare Forms mit Initialize"),
KONZEPT-Modul-Accounting ("UI (WinForms, ein Fenster mit Tabs)").
BEWUSST STEHEN GEBLIEBEN sind die Kommentare, die WinForms nur als
Begruendung nennen - warum LoggingService ein Ereignis hat statt einer
RichTextBox, warum ModuleView Func<object> liefert, warum es benannte
Record-Zeilentypen gibt, warum die Einstellungsmaske aus Attributen entsteht.
Das ist die Herleitung des heutigen Entwurfs; ohne sie sieht spaeter jede
dieser Stellen nach Umstaendlichkeit ohne Grund aus.
KONZEPT-Linux-Portierung.md bekommt einen Statusvermerk: umgesetzt, die
Pfadangaben im Fundstellenverzeichnis beziehen sich auf den alten Aufbau.
Zwei Abweichungen von der Schaetzung sind dort festgehalten - der geringere
Aufwand dank der PolytraderSharp-Vorlage, und dass die dort empfohlene
InvariantGlobalization ein Fehler gewesen waere.
Verifiziert: Build 0 Fehler/0 Warnungen, 193 Tests gruen, Smoke-UI
konstruiert alle 7 Ansichten + Launcher + Dialog, Daemon-Prueflauf OK,
publish -r linux-x64 fuer beide Einstiegspunkte fehlerfrei.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
75 lines
3.3 KiB
XML
75 lines
3.3 KiB
XML
<Application xmlns="https://github.com/avaloniaui"
|
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
x:Class="IBKRTrader.App.App"
|
|
RequestedThemeVariant="Light">
|
|
|
|
<Application.Styles>
|
|
<FluentTheme />
|
|
<StyleInclude Source="avares://Avalonia.Controls.DataGrid/Themes/Fluent.xaml" />
|
|
|
|
<!-- Projektweite Grundgestaltung. Bewusst hier zentral statt je Fenster wiederholt, damit
|
|
alle Fenster gleich aussehen und die neuen Module direkt darauf aufsetzen können. -->
|
|
|
|
<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" />
|
|
</Style>
|
|
|
|
<!-- KPI-Kachel: Ersatz für die zweizeiligen Labels der WinForms-Oberfläche. -->
|
|
<Style Selector="Border.kpi">
|
|
<Setter Property="Background" Value="#F5F5F5" />
|
|
<Setter Property="BorderBrush" Value="#DDDDDD" />
|
|
<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" />
|
|
</Style>
|
|
<Style Selector="Border.kpi TextBlock.caption">
|
|
<Setter Property="FontSize" Value="11" />
|
|
<Setter Property="Foreground" Value="#666666" />
|
|
</Style>
|
|
<Style Selector="Border.kpi TextBlock.value">
|
|
<Setter Property="FontSize" Value="18" />
|
|
<Setter Property="FontWeight" Value="SemiBold" />
|
|
</Style>
|
|
|
|
<!-- Werkzeugleiste oben in jedem Fenster (Ersatz für ToolStrip). -->
|
|
<Style Selector="Border.toolbar">
|
|
<Setter Property="Background" Value="#FAFAFA" />
|
|
<Setter Property="BorderBrush" Value="#DDDDDD" />
|
|
<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="#FAFAFA" />
|
|
<Setter Property="BorderBrush" Value="#DDDDDD" />
|
|
<Setter Property="BorderThickness" Value="0,1,0,0" />
|
|
<Setter Property="Padding" Value="8,4" />
|
|
</Style>
|
|
<Style Selector="Border.statusbar TextBlock">
|
|
<Setter Property="FontSize" Value="12" />
|
|
<Setter Property="Foreground" Value="#666666" />
|
|
</Style>
|
|
|
|
<!-- Abschnittsüberschrift innerhalb eines Fensters. -->
|
|
<Style Selector="TextBlock.section">
|
|
<Setter Property="FontSize" Value="13" />
|
|
<Setter Property="FontWeight" Value="SemiBold" />
|
|
<Setter Property="Margin" Value="0,8,0,4" />
|
|
</Style>
|
|
</Application.Styles>
|
|
|
|
</Application>
|