Vor dem Entfernen der WinForms-UI: maschinell aus allen .Designer.cs extrahierte Spezifikation aller 16 Fenster - Groessen, Tabs, Beschriftungen, Schaltflaechen und saemtliche Grid-Spalten mit Reihenfolge, Format und Breite. Dazu uebergreifende Gestaltungsregeln, Farbwerte der PnL-Zeilenfaerbung, Symbol-Schluessel je Fenster und Verhaltensnotizen aus dem Code-Behind. Damit laesst sich die Avalonia-UI moeglichst 1:1 nachbauen. Der Originalcode bleibt zusaetzlich im Tag winforms-final; das Dokument empfiehlt, dort einmalig Screenshots mit echten Daten zu ziehen (optischer Gesamteindruck, den kein Text ersetzt). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
20 KiB
UI-Spezifikation der WinForms-Oberfläche (Rekonstruktionsvorlage für Avalonia)
Stand: 06.08.2026 · Zweck: Die WinForms-UI wird im Zuge der Linux-Portierung entfernt. Dieses Dokument hält fest, wie sie aussah und was sie konnte, damit die Avalonia-Umsetzung so nah wie möglich am Original bleibt.
Der Originalcode ist nicht verloren. Der Git-Tag
winforms-finalenthält den vollständigen letzten Stand. Auschecken und ansehen:git checkout winforms-finalDieses Dokument ist die lesbare Zusammenfassung — für Details (Pixelabstände, Andockung, Farbwerte) immer in den Tag schauen. Die Angaben unten sind maschinell aus den
.Designer.cs-Dateien extrahiert, also exakt und nicht aus dem Gedächtnis rekonstruiert.
Screenshots — bitte einmal selbst anlegen
Was dieses Dokument nicht leisten kann, ist der optische Gesamteindruck: Proportionen, Abstände, Farbwirkung, wie voll die Fenster im Alltag aussehen. Dafür lohnt sich einmalig:
git checkout winforms-final
Dann die App starten, jedes Fenster mit echten Daten öffnen und einen Screenshot ablegen
(Vorschlag: docs/ui-referenz/<Fenstername>.png). Zehn Minuten Arbeit, die beim Nachbau mehr
wert sind als jede Beschreibung. Danach mit git checkout main zurück.
Übergreifende Gestaltungsregeln
Diese Muster ziehen sich durch alle Fenster und sollten in Avalonia erhalten bleiben:
| Regel | Umsetzung in WinForms | Entsprechung in Avalonia |
|---|---|---|
| Alle Fenster maximiert öffnen | WindowState = Maximized, StartPosition = CenterScreen (ShellUiHost.OpenView) |
WindowState="Maximized" |
| Gemeinsame Fenster-Menüleiste auf JEDEM Fenster | WindowMenu.Wire() hängt oben einen MenuStrip an; alle Fenster nebeneinander mit Icon, aktuelles fett + angehakt |
Menu mit ItemsSource-Bindung (deklarativ!) |
| Rechte Menüaktion kontextabhängig | Launcher → „Beenden" (mit Sicherheitsabfrage); alle anderen Fenster → „Fenster schließen" | DockPanel — Avalonia kennt kein ToolStripItemAlignment.Right |
| Ein Fenster je View | ShellUiHost hält höchstens eine Instanz, holt sie sonst nach vorn |
gleiche Logik; der Contract ist bereits toolkit-neutral |
| Zahlenformate in Tabellen | DefaultCellStyle.Format (N2, N1, …) |
Binding StringFormat |
| Schriftart | „Segoe UI" (21×), Terminal „Consolas" (1×) | Systemschrift + Monospace-Fallback — Segoe UI gibt es auf Linux nicht |
| Zeilenfärbung nach PnL | TradeRowColoring lieferte die Farbe direkt in DefaultCellStyle.BackColor |
bereits umgestellt: Logik liefert TradeRowTint, die UI mappt auf Farbe |
Farbwerte der Zeilenfärbung (aus TradeRowPalette — unverändert übernehmen):
| Kategorie | RGB | Bedeutung |
|---|---|---|
Loss |
245, 200, 200 | < 0 % — rot |
SmallWin |
212, 240, 212 | 0–10 % — hellgrün |
BigWin |
140, 214, 140 | > 10 % — grün |
Symbol-Schlüssel je Fenster (siehe Ui/ViewIcons.cs — die Schlüssel bleiben gültig):
| View-ID | Schlüssel | Bildressource |
|---|---|---|
core.dashboard |
dashboard |
dashboard.png |
core.settings |
settings |
setting_tools.png |
core.terminal |
terminal |
error_log.png |
core.jobs |
jobs |
system_time.png |
copytrading.main |
copytrading |
cross_reference.png |
resolutionfarming.main |
resolutionfarming |
file_start_workflow.png |
supervisor.main |
supervisor |
emotion_batman.png |
accounting.main |
accounting |
coins_in_hand.png |
Die PNG-Dateien liegen weiterhin in Resources/ und können unverändert weiterverwendet werden.
A. Modul-Fenster (in diesem Schritt entfernt)
CopyTradingMainForm — Hauptfenster Copytrading
Fenstergröße: 1714 × 1167 px
Tabs (Reihenfolge): Master-Trader | Offene Trades | Geschlossene Trades | Account-Einstellungen
Steuerelemente: TabPage ×4, TabControl ×1, MasterTradersView ×1, OpenTradesView ×1, ClosedTradesView ×1, AccountSettingsView ×1
MasterTradersView — Tab „Master-Trader“
Tabellenspalten (Reihenfolge = Anzeigereihenfolge):
| # | Spaltenkopf | Feldname | Format | Breite |
|---|---|---|---|---|
| 1 | # | colId |
— | 50 px |
| 2 | Wallet | colWallet |
— | 170 px |
| 3 | Name | colName |
— | Rest/Auto |
| 4 | Kategorie | colCategory |
— | 110 px |
| 5 | Aktiv | colActive |
— | 50 px |
| 6 | Trades (7T) | colTrades |
— | 90 px |
| 7 | Winrate % | colWinrate |
— | 90 px |
| 8 | PnL (7T) | colPnl |
— | 100 px |
| 9 | Copy-PnL (30T) | colCopyPnl |
— | 110 px |
| 10 | Profit-Faktor | colCopyPf |
— | 100 px |
| 11 | Ø PnL/Trade | colCopyAvg |
— | 100 px |
| 12 | Copy-Trades | colCopyCount |
— | 90 px |
Steuerelemente: DataGridViewTextBoxColumn ×11, ToolStripButton ×4, Panel ×2, ToolStrip ×1, ToolStripSeparator ×1, DataGridView ×1, DataGridViewCheckBoxColumn ×1, Splitter ×1, PropertyGrid ×1, GroupBox ×1, CheckedListBox ×1, Label ×1
OpenTradesView — Tab „Offene Trades“
Beschriftungen:
lblSummary= „—"
Tabellenspalten (Reihenfolge = Anzeigereihenfolge):
| # | Spaltenkopf | Feldname | Format | Breite |
|---|---|---|---|---|
| 1 | Account | colAccount |
— | Fill 120 |
| 2 | Master-Trader | colTrader |
— | Fill 120 |
| 3 | Markt | colMarket |
— | Fill 240 |
| 4 | Outcome | colOutcome |
— | Fill 80 |
| 5 | Side | colSide |
— | Fill 55 |
| 6 | Entry | colEntry |
— | Fill 65 |
| 7 | Aktuell | colCurrent |
— | Fill 65 |
| 8 | Size | colSize |
— | Fill 70 |
| 9 | Einsatz | colAmount |
— | Fill 80 |
| 10 | Wert | colValue |
— | Fill 80 |
| 11 | Buchgewinn | colUnrealized |
— | Fill 90 |
| 12 | Buchgew. % | colUnrealizedPct |
— | Fill 80 |
| 13 | Status | colStatus |
— | Fill 90 |
Steuerelemente: DataGridViewTextBoxColumn ×13, ToolStrip ×1, ToolStripButton ×1, DataGridView ×1, Panel ×1, Label ×1
ClosedTradesView — Tab „Geschlossene Trades“
Beschriftungen:
lblSummary= „—"lblMarkt= „Markt:"lblMaster= „Master:"lblErgebnis= „Ergebnis:"lblVon= „Von:"lblBis= „Bis:"
Schaltflächen: „Zurücksetzen"
Tabellenspalten (Reihenfolge = Anzeigereihenfolge):
| # | Spaltenkopf | Feldname | Format | Breite |
|---|---|---|---|---|
| 1 | # | colTradeId |
— | 60 px |
| 2 | Account | colAccount |
— | 130 px |
| 3 | Master-Trader | colTrader |
— | 130 px |
| 4 | Markt | colMarket |
— | Rest/Auto |
| 5 | Outcome | colOutcome |
— | 80 px |
| 6 | Side | colSide |
— | 60 px |
| 7 | Entry | colEntry |
— | 70 px |
| 8 | Exit | colExit |
— | 70 px |
| 9 | Size | colSize |
— | 70 px |
| 10 | PnL | colPnl |
— | 80 px |
| 11 | PnL % | colPnlPct |
— | 70 px |
| 12 | Eröffnet | colOpenedAt |
— | 130 px |
| 13 | Geschlossen | colClosedAt |
— | 130 px |
Steuerelemente: DataGridViewTextBoxColumn ×13, Label ×6, Panel ×2, ComboBox ×2, DateTimePicker ×2, ToolStrip ×1, ToolStripButton ×1, DataGridView ×1, TextBox ×1, Button ×1
AccountSettingsView — Tab „Account-Einstellungen“
Steuerelemente: ToolStrip ×1, ToolStripLabel ×1, ToolStripComboBox ×1, ToolStripSeparator ×1, ToolStripButton ×1, PropertyGrid ×1, Panel ×1, Label ×1
ResolutionFarmingMainForm
Fenstergröße: 1429 × 1030 px
Tabs (Reihenfolge): Kandidaten | Positionen | Historie / Statistik | Settings
Beschriftungen:
lblCandKonto= „Konto:"lblSetKonto= „Konto:"
Schaltflächen: „Aktualisieren", „Speichern"
Steuerelemente: TabPage ×4, Panel ×4, Label ×4, Button ×4, DataGridView ×3, ComboBox ×2, TabControl ×1, PropertyGrid ×1
SupervisorMainForm
Fenstergröße: 1786 × 1163 px
Tabs (Reihenfolge): Analyse | Dossiers | Berichte | Counterfactual
Beschriftungen:
lblProfil= „Profil:"lblModel= „Modell:"lblSignal= „SignalId:"
Schaltflächen: „Aktualisieren", „Dossier öffnen", „Senden", „Verlauf leeren"
Steuerelemente: ToolStripButton ×5, TabPage ×4, ToolStrip ×4, ToolStripLabel ×3, TextBox ×3, DataGridView ×3, ToolStripTextBox ×2, ToolStripSeparator ×2, SplitContainer ×2, TabControl ×1, ToolStripComboBox ×1, RichTextBox ×1, Panel ×1, Button ×1, Label ×1
AccountingMainForm
Fenstergröße: 1571 × 1067 px
Tabs (Reihenfolge): Übersicht / BWA | Ledger | Abruf / Status
Beschriftungen:
lblKpiNet= „Netto-Handelsergebnis ↵ —"lblKpiClosing= „Endsaldo ↵ —"lblKpiDeposits= „Einzahlungen ↵ —"lblKpiWithdrawals= „Auszahlungen ↵ —"lblKpiFees= „Fees ↵ —"lblKpiRewards= „Rewards ↵ —"lblKpiVolume= „Handelsvolumen ↵ —"lblKpiTrades= „Trades ↵ —"lblWaehrung= „Währung:"lblBis= „Bis:"lblVon= „Von:"lblOvKonto= „Konto:"lblLedgerKonto= „Konto:"lblStatusKonto= „Konto:"
Schaltflächen: „Aktualisieren", „Backfill (volle Historie)", „Berechnen", „CSV-Export", „Inkrement jetzt", „PDF-Export"
Steuerelemente: Label ×13, ToolStripButton ×4, TabPage ×3, Button ×3, DataGridView ×3, ToolStripSeparator ×3, ComboBox ×2, DateTimePicker ×2, ToolStrip ×2, ToolStripLabel ×2, ToolStripComboBox ×2, TabControl ×1, Panel ×1, FlowLayoutPanel ×1
B. Core-/Shell-Fenster (bleiben vorerst bestehen)
LauncherForm — Startleiste
Fenstergröße: 2599 × 669 px
Beschriftungen:
lbl_trading= „Trading: —"lbl_modules= „Module: —"lbl_ratelimit= „API: —"
Schaltflächen: „API: —", „Accounting", „CopyTrading", „Dashboard", „DemoTrading (—)", „LiveTrading (—)", „ResolutionFarming", „Server Jobs", „Settings", „Supervisor", „Terminal / Logs"
Tabellenspalten (Reihenfolge = Anzeigereihenfolge):
| # | Spaltenkopf | Feldname | Format | Breite |
|---|---|---|---|---|
| 1 | Account | colAccName |
— | 113 px |
| 2 | Module | colAccModules |
— | 109 px |
| 3 | Polymarket | colAccPoly |
— | 106 px |
| 4 | Wallet (USDC) | colAccBalance |
— | 157 px |
| 5 | 3T PnL | colAccPnl3d |
— | Rest/Auto |
| 6 | 3T Winrate % | colAccWin3d |
— | 153 px |
| 7 | Overall P/L | colAccOverall |
— | 133 px |
Steuerelemente: ToolStripButton ×10, DataGridViewTextBoxColumn ×6, ToolStripStatusLabel ×3, ToolStrip ×2, ToolStripSeparator ×2, MenuStrip ×1, StatusStrip ×1, DataGridView ×1, DataGridViewButtonColumn ×1, LauncherWidgetsPanel ×1
LauncherWidgetsPanel — Live-Überblick
Tabs (Reihenfolge): Auffällige Trades (24h)
Tabellenspalten (Reihenfolge = Anzeigereihenfolge):
| # | Spaltenkopf | Feldname | Format | Breite |
|---|---|---|---|---|
| 1 | Zeit | colAlertTime |
— | 70 px |
| 2 | Level | colAlertLevel |
— | 70 px |
| 3 | Nachricht | colAlertMsg |
— | Rest/Auto |
| 4 | Modul | colNotModule |
— | 100 px |
| 5 | Markt | colNotMarket |
— | Rest/Auto |
| 6 | PnL | colNotPnl |
— | 80 px |
| 7 | PnL % | colNotPnlPct |
— | 70 px |
Steuerelemente: DataGridViewTextBoxColumn ×7, GroupBox ×3, DataGridView ×2, TableLayoutPanel ×1, FlowLayoutPanel ×1, RichTextBox ×1
DashboardView
Fenstergröße: 1714 × 1083 px
Tabs (Reihenfolge): Dashboard | Tradehistorie | Module
Beschriftungen:
lblKpiPnl= „Netto-PnL ↵ —"lblKpiWin= „Winrate ↵ —"lblKpiTrades= „Trades ↵ —"lblKpiAvg= „Ø PnL/Trade ↵ —"lblKpiPf= „Profit-Faktor ↵ —"lblErgebnis= „Ergebnis:"lblSuche= „Suche:"lblModulesInfo= „Module aktivieren/deaktivieren. Änderungen greifen nach dem nächsten Neustart von PolyTrader."
Tabellenspalten (Reihenfolge = Anzeigereihenfolge):
| # | Spaltenkopf | Feldname | Format | Breite |
|---|---|---|---|---|
| 1 | Modul | colModule |
— | 110 px |
| 2 | Konto | colAccount |
— | 130 px |
| 3 | Markt | colMarket |
— | Rest/Auto |
| 4 | Outcome | colOutcome |
— | 80 px |
| 5 | Side | colSide |
— | 60 px |
| 6 | Entry | colEntry |
— | 70 px |
| 7 | Exit | colExit |
— | 70 px |
| 8 | Size | colSize |
— | 70 px |
| 9 | PnL | colPnl |
— | 80 px |
| 10 | PnL % | colPnlPct |
— | 70 px |
| 11 | Geschlossen | colClosedAt |
— | 140 px |
| 12 | Modul | colModName |
— | 220 px |
| 13 | Status | colModStatus |
— | 260 px |
| 14 | Hinweis | colModHint |
— | Rest/Auto |
| 15 | Aktion | colModAction |
— | 160 px |
Steuerelemente: DataGridViewTextBoxColumn ×14, Label ×8, ToolStripLabel ×4, ToolStripComboBox ×4, TabPage ×3, PictureBox ×3, Panel ×2, DataGridView ×2, ToolStrip ×1, ToolStripButton ×1, TabControl ×1, FlowLayoutPanel ×1, TextBox ×1, ComboBox ×1, DataGridViewButtonColumn ×1
TerminalView
Fenstergröße: 1429 × 1083 px
Tabs (Reihenfolge): Live | Log Viewer
Beschriftungen:
lblFilter= „Level:"lblViewerStatus= „—"lblVText= „Text:"lblVCid= „CID:"lblVLevel= „Level:"lblVDatum= „Datum:"
Schaltflächen: „Alles auswählen", „Alles kopieren", „Kopieren", „Laden", „Stop Autoscroll", „Terminal leeren"
Steuerelemente: Label ×6, ToolStripMenuItem ×4, DataGridViewTextBoxColumn ×4, TabPage ×2, Panel ×2, ComboBox ×2, Button ×2, TextBox ×2, TabControl ×1, RichTextBox ×1, ContextMenuStrip ×1, ToolStripSeparator ×1, DateTimePicker ×1, DataGridView ×1
SettingsView
Fenstergröße: 1185 × 820 px
Tabs (Reihenfolge): General Settings | Polymarket Accounts
Schaltflächen: „Lizenz prüfen / setzen …", „Load Settings from File", „Löschen", „Master-Key erzeugen", „Neuer Account", „OpenRouter-Key setzen …", „Save Changes", „Test-Heartbeat senden", „Watchdog-Token setzen …"
Steuerelemente: ToolStripButton ×9, PropertyGrid ×2, TabPage ×2, ToolStrip ×2, DataGridViewTextBoxColumn ×2, DataGridViewCheckBoxColumn ×2, TabControl ×1, DataGridView ×1
JobsView
Fenstergröße: 1429 × 833 px
Tabellenspalten (Reihenfolge = Anzeigereihenfolge):
| # | Spaltenkopf | Feldname | Format | Breite |
|---|---|---|---|---|
| 1 | Job Name | colJobName |
— | 150 px |
| 2 | Status | colStatus |
— | 150 px |
| 3 | Zuletzt ausgeführt | colLastRun |
— | 130 px |
| 4 | Nächster Lauf | colNextRun |
— | 130 px |
| 5 | Aktiv | col_dgv_jobs_Enabled |
— | 60 px |
| 6 | Aktion | col_dgv_jobs_Run |
— | 90 px |
| 7 | Beschreibung | colDescription |
— | Rest/Auto |
Steuerelemente: DataGridViewTextBoxColumn ×5, DataGridView ×1, DataGridViewCheckBoxColumn ×1, DataGridViewButtonColumn ×1, ToolStrip ×1, ToolStripButton ×1
LicenseDialog
Beschriftungen:
lblHeadline= „Für PolyTrader wird eine gültige Lizenz benötigt."lblStatus= „Status:"lblHwCaption= „Hardware-ID dieses Rechners (für die Aktivierung):"lblKeyCaption= „Lizenzschlüssel:"
Schaltflächen: „Kopieren", „Ohne Lizenz starten (eingeschränkt)", „Validieren"
Steuerelemente: Label ×5, Button ×3, TextBox ×2
ShutdownConfirmDialog
Beschriftungen:
lblTitle= „PolyTrader sicher beenden?"lblCountdown= „Beenden möglich in 10 s …"
Schaltflächen: „Abbrechen", „Beenden (10 s)"
Steuerelemente: Label ×3, Button ×2, Timer ×1
Verhaltensnotizen aus dem Code-Behind
Was die Designer-Dateien nicht zeigen — Verhalten, das beim Nachbau leicht untergeht:
Copytrading
- MasterTradersView: Links das Grid, rechts ein
PropertyGridfür den gewählten Trader, darunter eineCheckedListBox„Zugewiesene Accounts". Getrennt durch einenSplitter. Nach dem Speichern erscheint ein Hinweistext mit Uhrzeit: „Gespeichert: #ID Name (n Account(s)) um HH:mm:ss". - OpenTradesView / ClosedTradesView: Die Zeilenfärbung wird bei
DataBindingCompleteneu gesetzt. Unter dem Grid zeigt eine Zusammenfassungszeile (lblSummary) die Summen. - ClosedTradesView: Filterleiste mit Markt-Suche, Master-Auswahl, Ergebnis-Auswahl (Alle / Gewinner / Verlierer) und Datumsbereich; dazu „Zurücksetzen".
- AccountSettingsView: Konto-Auswahl in der Toolbar, darunter ein
PropertyGridaufCopyTradingAccountSettings. Die[Description]-Attribute der Modellklasse sind die Feldbeschreibungen — beim Nachbau als Tooltips oder Hilfetexte übernehmen.
ResolutionFarming
Vier Tabs (Kandidaten / Positionen / Historie + Statistik / Settings), je ein Grid mit einer
„Aktualisieren"-Schaltfläche und Konto-Auswahl oben. Der Settings-Tab zeigt ein PropertyGrid
plus „Speichern" mit Bestätigungstext samt Uhrzeit.
Supervisor
- Analyse-Tab: chat-artig —
RichTextBoxfür den Verlauf (je Eintrag Zeitstempel + Sprecher), Eingabefeld, „Senden", „Verlauf leeren"; Profil- und Modellauswahl in der Toolbar. - Dossiers-Tab: Grid plus „Dossier öffnen".
- Berichte / Counterfactual: Grid plus „Aktualisieren", Filterung über
SignalId.
Accounting
- Drei Tabs: Übersicht/BWA, Ledger, Abruf/Status.
- KPI-Kacheln in einem
FlowLayoutPanel: Netto-Handelsergebnis, Endsaldo, Einzahlungen, Auszahlungen, Fees, Rewards, Handelsvolumen, Trades. Format je Kachel zweizeilig:"<Titel>\n<Wert:N2> <Währung>"— der Wert steht unter dem Titel. - Zeitraumwahl über zwei
DateTimePicker(Von/Bis), dazu Währungs- und Kontoauswahl. - Export über „PDF-Export" und „CSV-Export"; im Status-Tab „Inkrement jetzt" und „Backfill (volle Historie)".
Shell
- LauncherForm: Startleiste mit einem Button je Fenster (angehakt, wenn das Fenster offen ist),
Schnellaktionen „LiveTrading" und „DemoTrading" (dreistufig: Inactive → SellOnly → Active),
Statuszeile mit Trading-Status, Modul-Status und API-Ratelimit. Darunter die Account-Übersicht
und der Live-Überblick (
LauncherWidgetsPanel). - Das Schließen-X ist abgefangen und läuft über dieselbe Sicherheitsabfrage wie „Beenden".
- ShutdownConfirmDialog: Die Beenden-Schaltfläche ist 10 Sekunden gesperrt, mit Countdown im Text („Beenden möglich in 10 s"); Abbrechen ist jederzeit möglich.
- TerminalView: Live-Tab mit farbigen Log-Zeilen und abschaltbarem Autoscroll, Kontextmenü (Alles auswählen / Alles kopieren), Auto-Clear bei Erreichen der RAM-Grenze. Log-Viewer-Tab mit Filtern über Datum, Level, CID und Volltext.
- DashboardView: KPI-Kacheln (Netto-PnL, Winrate, Trades, Ø PnL/Trade, Profit-Faktor), drei Diagramme (Equity-Kurve, PnL je Modul, PnL je Tag), Tradehistorie mit Suche und Gewinner/Verlierer-Filter sowie ein Modul-Tab zum Aktivieren/Deaktivieren (wirkt nach Neustart). Der Profit-Faktor zeigt „∞", wenn es keine Verluste gab.
Was beim Nachbau bewusst anders werden darf
Nicht alles ist erhaltenswert — diese Punkte sind Altlasten der WinForms-Umsetzung:
- Die
PropertyGrid-Fenster (Settings, Account-Einstellungen, Master-Trader, ResolutionFarming): statt einer alphabetischen Reflection-Liste künftig fachlich gruppierte Formulare mit Validierung, Einheiten am Feld und abhängigen Feldern. Die[Description]-Attribute liefern die Texte, die[Browsable(false)]-Markierungen die auszublendenden Felder. - Menüaufbau zur Laufzeit (
WindowMenu.Populateleert und fülltmenu.Items): verstößt gegen die neue Layout-Regel. In Avalonia ein deklarativesMenumitItemsSource-Bindung. - Diagramme als Bitmap (ScottPlot → PNG →
PictureBox): entfällt mit LiveCharts2. - Das
RichTextBox-Terminal: als virtualisiertesItemsControlüber eineObservableCollection<LogLine>neu bauen — das löst nebenbei das RAM-Problem, wegen dem heute ein Auto-Clear nötig ist. - Feste Pixelbreiten in den Grids: in Avalonia besser mit
*-Sternbreiten arbeiten. Die Werte in den Tabellen oben geben die Proportionen vor, nicht die absoluten Zahlen.