Я нашел новый поворот в вопросе «Визуализация в RenderTargetBitmap»!
Я делаю предварительные просмотры WPF для дизайнера. Это означает, что мне нужно взять визуал WPF и отобразить его в растровое изображение, чтобы этот визуал не отображался. Получил хороший маленький метод, чтобы сделать это, нравится видеть это здесь, это идет
private static BitmapSource CreateBitmapSource(FrameworkElement visual)
{
Border b = new Border { Width = visual.Width, Height = visual.Height };
b.BorderBrush = Brushes.Black;
b.BorderThickness = new Thickness(1);
b.Background = Brushes.White;
b.Child = visual;
b.Measure(new Size(b.Width, b.Height));
b.Arrange(new Rect(b.DesiredSize));
RenderTargetBitmap rtb = new RenderTargetBitmap(
(int)b.ActualWidth,
(int)b.ActualHeight,
96,
96,
PixelFormats.Pbgra32);
// intermediate step here to ensure any VisualBrushes are rendered properly
DrawingVisual dv = new DrawingVisual();
using (var dc = dv.RenderOpen())
{
var vb = new VisualBrush(b);
dc.DrawRectangle(vb, null, new Rect(new Point(), b.DesiredSize));
}
rtb.Render(dv);
return rtb;
}
Работает нормально, за исключением одной вещи, написанной с помощью leeetle ... если мой FrameworkElement имеет VisualBrush, эта кисть не попадает в окончательный рендеринг битовой карты Как то так:
<UserControl.Resources>
<VisualBrush
x:Key="LOLgo">
<VisualBrush.Visual>
<!-- blah blah -->
<Grid
Background="{StaticResource LOLgo}">
<!-- yadda yadda -->
Все остальное отображается в растровом изображении, но этот VisualBrush просто не будет отображаться. Очевидные решения Google были предприняты и потерпели неудачу. Даже те, которые специально упоминают VisualBrushes, отсутствующие в растровых изображениях RTB.
У меня есть подлое подозрение, что это может быть вызвано тем, что это Ресурс, и этот ленивый ресурс не встроен. Таким образом, возможное исправление было бы как-то (???) принудительно разрешать все статические ссылки на ресурсы перед рендерингом. Но я абсолютно не знаю, как это сделать.
У кого-нибудь есть исправление для этого?