У меня есть простой XAML, подобный этому:
<UserControl x:Class="blabla.MyView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
Name="myUserControl">
<Grid Name="myGrid" Background="White">
<TextBlock Name="myTextBlock"/>
</Grid>
</UserControl>
Теперь я хотел бы создать новый вид в фоновом режиме с помощью этого xaml. После этого я хотел бы изменить элементы управления (или, возможно, добавить некоторые элементы управления самостоятельно), сохранить его в растровом изображении и назначить его в буфер обмена (просто чтобы увидеть результат). Я бы попробовал это так:
MyView view = new MyView();
view.myTextBlock.Text = "TEST";
Rect bounds = VisualTreeHelper.GetDescendantBounds(view);
DrawingVisual dv = new DrawingVisual();
using (DrawingContext ctx = dv.RenderOpen())
{
VisualBrush vb = new VisualBrush(view);
ctx.DrawRectangle(vb, null, new Rect(new System.Windows.Point(), bounds.Size));
}
RenderTargetBitmap bmp = new RenderTargetBitmap((int)view.ActualWidth, (int)view.ActualHeight, 96, 96, PixelFormats.Pbgra32);
bmp.Render(dv);
PngBitmapEncoder pngImage = new PngBitmapEncoder();
pngImage.Frames.Add(BitmapFrame.Create(bmp));
System.Windows.Clipboard.SetImage(pngImage.Frames[0]);
К сожалению, размер view
не изменяется. Попытка установить жестко запрограммированную ширину / высоту создает черное изображение / растровое изображение.
Как мне создать простое растровое изображение из XAML?