Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
Loaded="MainWindow_Loaded">Замените элемент
GridStackPanelImage<StackPanel Background="AliceBlue" Name="myStackPanel"> <Image Name="myImage" Height="80"/></StackPanel>Элемент управления
ImageSourceLoadedDrawingBrushMainWindow.csusing System;using System.Windows;using System.Windows.Media;using System.Windows.Media.Imaging;Вот реализация обработчика события
Loadedprivate void MainWindow_Loaded( object sender, RoutedEventArgs e){ const int TextFontSize = 30;<b> // Создать объект System.Windows.Media.FormattedText.</b> FormattedText text = new FormattedText( "Hello Visual Layer!", new System.Globalization.CultureInfo("en-us"), FlowDirection.LeftToRight, new Typeface(this.FontFamily, FontStyles.Italic, FontWeights.DemiBold, FontStretches.UltraExpanded), TextFontSize, Brushes.Green, null, VisualTreeHelper.GetDpi(this).PixelsPerDip);<b> // Создать объект DrawingVisual и получить объект DrawingContext.</b> DrawingVisual drawingVisual = new DrawingVisual(); using(DrawingContext drawingContext = drawingVisual.RenderOpen()) {<b> // Вызвать любой из методов DrawingContext для визуализации данных.</b> drawingContext.DrawRoundedRectangle( Brushes.Yellow, new Pen(Brushes.Black, 5), new Rect(5, 5, 450, 100), 20, 20); drawingContext.DrawText(text, new Point(20, 20)); }<b> // Динамически создать битовое изображение,</b><b> // используя данные в объекте DrawingVisual.</b> RenderTargetBitmap bmp = new RenderTargetBitmap( 500, 100, 100, 90, PixelFormats.Pbgra32); bmp.Render(drawingVisual);<b> // Установить источник для элемента управления Image.</b> myImage.Source = bmp;}В коде задействовано несколько новых классов WPF, которые будут кратко описаны ниже. Метод начинается с создания нового объекта
FormattedTextЗатем через вызов метода
RenderOpen()DrawingVisualDrawingContextDrawingVisualDrawingVisualНесколько последних операторов отображают
DrawingVisualRenderTagetBitmapSystem.Windows.Media.ImagingSourceImage
На заметку! Пространство имен
System.Windows.Media.ImagingRenderTargetBitmapJpegBitmapEncoderВизуализация графических данных в специальном диспетчере компоновки
Хотя применение
DrawingVisualGridStackPanelCanvasWindowPageUserControl