Fehler #87
Von Julius Haman vor 5 Tagen aktualisiert
## Ausgangslage
In der Trainingsdetail-Seite zeigt die Karte „Pulszonen" das OxyPlot-Kreisdiagramm
(300 × 230 px, `TrainingDetailView.xaml`, `oxy:PlotView` → `ZonePieModel`) mit der
Zonenlegende rechts daneben.
An den Tortenstücken stehen Prozentwerte **außen** mit Fühlerlinie (Tick).
Bei den Segmenten oben (12 Uhr) und unten (6 Uhr) ist der Text oben bzw. unten
angeschnitten und nicht vollständig lesbar; auch seitlich steht der Text dicht am Rand.
## Ursache
* OxyPlot 2.2.0 `PieSeries` belegt `OutsideLabelFormat` im Konstruktor mit
**`"{2:0} %"`** (Vorgabe, nicht `null`). Der Code setzt diese Eigenschaft nirgends –
die Außenbeschriftung entsteht also implizit und wurde so nie geplant.
* `InsideLabelFormat = string.Empty` (TrainingDetailViewModel, `BuildZonePie`) betrifft
ausschließlich Text **in** den Segmenten und ist für das Problem ohne Bedeutung
(leerer String statt `null` lässt OxyPlot pro Segment trotzdem Text ausgeben).
* OxyPlot berechnet den Radius als `min(PlotArea.Breite, PlotArea.Höhe) / 2`, die Torte
füllt den Plotbereich also **randlos** – im OxyPlot-Quellcode steht dazu
`// todo: reduce available size due to the labels`. Tick (6 px radial + 8 px horizontal)
und Text liegen damit außerhalb des sichtbaren Bereichs und werden vom festen
300 × 230-PlotView abgeschnitten.
Betroffene Stelle: `ErControl.Core/ViewModels/TrainingDetailViewModel.cs`, Methode `BuildZonePie`
(`new PieSeries { InsideLabelFormat = string.Empty, TrackerFormatString = ... }`).
## Lösungsvorschlag
1. Radius der Torte verkleinern (`PieSeries.Diameter`, ca. 0,9), 0,7–0,75), damit oben und unten
etwa 25–30 px Luft für Tick + Text bleiben – PlotView-Größe und Layout (Karte neben der
Legende) bleiben unverändert.
2. `OutsideLabelFormat` explizit setzen statt auf die OxyPlot-Vorgabe zu verlassen,
`InsideLabelFormat = null` statt leerem String.
3. Prüfen, ob das %-Format an der Torte und in der Legende zusammenpasst
(Torte `"{2:0} %"` gerundet vs. Legende `"{percent:P1}"` mit Nachkommastelle).
Alternative (bitte entscheiden): Außenbeschriftung komplett abschalten
(`OutsideLabelFormat = null`) und die Prozentwerte nur in der Legende zeigen –
dann aber bewusst, nicht durch einen OxyPlot-Zufall.
## Abnahmekriterien
* [ ] Alle Prozentwerte an den Tortenstücken sind vollständig sichtbar, auch bei den
Segmenten oben und unten und bei einem 100 %-Segment.
* [ ] Kein Abschneiden bei sehr kleinen Anteilen (z. B. 1–2 %).
* [ ] Klick-Tracker (`Zone: Wert (x,x %)`) und die Legende bleiben unverändert.
* [ ] Keine Layoutänderung an der Karte (300 × 230 px) und an der Trainingsdetailseite.
* [ ] Im Hell- und im Dark-Skin geprüft (Textfarbe folgt `PlotModel.TextColor`).