public static void DrawLinkedRealtimeData(this DrawingContext drawingContext, IEnumerable <ImageAnalysisResult> points, double itemHeight, double firstHeight, double maxWidth, double maxHeight, bool useShindoIcon = true) { if (points == null) { return; } var brush = (Brush)Application.Current.FindResource($"ForegroundColor"); var subBrush = (Brush)Application.Current.FindResource($"SubForegroundColor"); int count = 0; double verticalOffset = 0; foreach (var point in points) { double horizontalOffset = 0; var height = count == 0 ? firstHeight : itemHeight; if (useShindoIcon) { drawingContext.DrawIntensity(point.GetResultToIntensity().ToJmaIntensity(), new Point(0, verticalOffset), height); horizontalOffset += height; } else { drawingContext.DrawRectangle(new SolidColorBrush(Color.FromArgb(point.Color.A, point.Color.R, point.Color.G, point.Color.B)), null, new Rect(new Point(0, verticalOffset), new Size(height / 5, height))); horizontalOffset += height / 5; } var region = point.ObservationPoint.Region; if (region.Contains(' ')) { region = region.Substring(0, region.IndexOf(' ')); } var regionText = new FormattedText(region, CultureInfo.CurrentUICulture, FlowDirection.LeftToRight, face, itemHeight * .6, brush, 1); drawingContext.DrawText(regionText, new Point(horizontalOffset + height * 0.1, verticalOffset + (height - regionText.Height) / 2)); horizontalOffset += Math.Max(regionText.Width, maxWidth / 4); var valueText = new FormattedText(point.GetResultToIntensity()?.ToString("0.0") ?? "?", CultureInfo.CurrentUICulture, FlowDirection.LeftToRight, face, Math.Min(height * .4, itemHeight * .75), subBrush, 1); drawingContext.DrawText(valueText, new Point(maxWidth - valueText.Width, verticalOffset + height * .5)); var nameText = new FormattedText(point.ObservationPoint.Name, CultureInfo.CurrentUICulture, FlowDirection.LeftToRight, face2, itemHeight * .75, brush, 1); drawingContext.DrawText(nameText, new Point(horizontalOffset + height * 0.2, verticalOffset + (height - nameText.Height) / 2)); count++; verticalOffset += height; if (verticalOffset >= maxHeight) { return; } } }