using System.Collections.Generic; using System.Globalization; using Avalonia.Data.Converters; namespace LehrerApp.Desktop.Converters; /// Multipliziert die gerenderte Breite eines Referenzelements (typischerweise die neutrale /// Track-Leiste eines gestapelten Balkens) mit einem Anteil 0…1. Ersetzt eine im ViewModel hart /// codierte Pixelkonstante (Quick-Win, Nutzer-Feedback) — die Segmentbreite bleibt damit auch /// korrekt, wenn sich die Breite der Seitenspalte in XAML mal ändert, weil sie sich aus der /// tatsächlichen Bounds.Width des Track-Elements ergibt statt aus einer angenommenen /// festen Breite. `Grid.ColumnDefinitions` ließ sich dafür nicht binden (Avalonia bietet dort bei /// kompilierten Bindings keinen Setter — AVLN3000), deshalb MultiBinding auf Pixelbreite /// statt Grid-Sternspalten. public sealed class FractionWidthConverter : IMultiValueConverter { public static readonly FractionWidthConverter Instance = new(); public object? Convert(IList values, Type targetType, object? parameter, CultureInfo culture) { if (values is not [double trackWidth, double fraction, ..] || double.IsNaN(trackWidth)) return 0d; return Math.Max(0d, trackWidth * fraction); } }