1using System.Windows.Input;
2using CommunityToolkit.Mvvm.Input;
4using LiveChartsCore.Defaults;
5using LiveChartsCore.Kernel;
6using LiveChartsCore.Kernel.Events;
7using LiveChartsCore.SkiaSharpView;
8using LiveChartsCore.SkiaSharpView.Painting;
18 #region Class WidgetModelRaceAgePoint
32 set { _raceID = value; OnPropertyChanged(); }
35 private ushort _birthYear;
42 set { _birthYear = value; OnPropertyChanged(); }
45 private bool _isDisplayedFaded =
false;
51 get => _isDisplayedFaded;
52 set { _isDisplayedFaded = value; OnPropertyChanged(); }
62 public WidgetModelRaceAgePoint(ushort birthYear,
int numberOccurences,
int raceID,
int numberRaces) : base(birthYear, numberRaces - raceID, numberOccurences)
76 InitializeComponent();
77 PART_scrollViewerChart.SizeChanged += (sender, e) => OnPropertyChanged(nameof(
ChartHeight));
81 public override string Icon =>
"\uED55";
86 model.BirthYears.GroupBy(year => year)
100 NameTextSize = ANALYTICS_WIDGET_AXIS_TEXTSIZE_DEFAULT,
101 TextSize = ANALYTICS_WIDGET_AXIS_TEXTSIZE_DEFAULT,
103 Labels =
RaceIds.Select(
id => $
"#{id}").ToArray(),
108 CrosshairSnapEnabled =
true
112 OnPropertyChanged(nameof(
XAxes));
113 OnPropertyChanged(nameof(
YAxes));
136 public List<WidgetModelRaceAgePoint>
AgeSpanPoints {
get;
set; } =
new List<WidgetModelRaceAgePoint>();
147 List<ISeries> seriesList =
new List<ISeries>();
148 ISeries series =
new ScatterSeries<WidgetModelRaceAgePoint>
151 YToolTipLabelFormatter = point => $
"{Properties.Resources.RaceString} #{point.Model.RaceID}" +
152 Environment.NewLine +
153 $
"{point.Model.X}" + (point.Model.Weight > 1 ? $
" ({point.Model.Weight}x)" :
""),
156 MinGeometrySize = 15,
159 .OnPointMeasured(point =>
161 if (point.Visual is
null)
return;
169 point.Visual.Fill = point.Model.IsDisplayedFaded ? fadedPaintFill : normalPaintFill;
170 point.Visual.Stroke = point.Model.IsDisplayedFaded ? fadedPaintStroke : normalPaintStroke;
172 seriesList.Add(series);
173 return seriesList.ToArray();
198 NameTextSize = ANALYTICS_WIDGET_AXIS_TEXTSIZE_DEFAULT,
200 TextSize = ANALYTICS_WIDGET_AXIS_TEXTSIZE_DEFAULT,
212 private bool _isPointHovered;
218 get => _isPointHovered;
221 _isPointHovered = value;
225 OnPropertyChanged(nameof(
YAxes));
234 bool hasPoint = args?.NewPoints !=
null && args.NewPoints.Any();
243 ChartPoint point = args?.NewPoints?.FirstOrDefault();
246 UpdatePointFading(model.
RaceID);
248 args.Chart.CoreChart.Update(
new ChartUpdateParams { IsAutomaticUpdate =
false, Throttling =
false });
252 private void UpdatePointFading(
int hoveredRaceID)
253 =>
AgeSpanPoints.ForEach(p => p.IsDisplayedFaded = (p.RaceID != hoveredRaceID));
254 private void ClearPointFading()
Analytics module to calculate the ages for each race.
Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
static string BirthYearString
Sucht eine lokalisierte Zeichenfolge, die Birth Year ähnelt.
static string RaceString
Sucht eine lokalisierte Zeichenfolge, die Race ähnelt.