Содержимое WindowsFormsHost
отображается с помощью GDI +, как в приложении Windows Forms, поэтому вы не можете использовать RenderTargetBitmap для этого, так как он не отображается WPF. Вместо этого вы должны использовать функцию GDI + BitBlt, которая позволяет вам делать снимки области на экране.
См. этот пост для примера
ОБНОВЛЕНИЕ: вот еще одна версия кода, обновленная для использования с WPF:
using System.Drawing;
...
public static ImageSource Capture(IWin32Window w)
{
IntPtr hwnd = new WindowInteropHelper(w).Handle;
IntPtr hDC = GetDC(hwnd);
if (hDC != IntPtr.Zero)
{
Rectangle rect = GetWindowRectangle(hwnd);
Bitmap bmp = new Bitmap(rect.Width, rect.Height);
using (Graphics destGraphics = Graphics.FromImage(bmp))
{
BitBlt(
destGraphics.GetHdc(),
0,
0,
rect.Width,
rect.Height,
hDC,
0,
0,
TernaryRasterOperations.SRCCOPY);
}
ImageSource img = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
bmp.GetHBitmap(),
IntPtr.Zero,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
return img;
}
return null;
}
Просто позвоните и передайте элемент управления WindowsFormsHost
в качестве параметра методу Capture
и сделайте все, что захотите, с полученным ImageSource
. Для определения BitBlt
и GetDC
, посмотрите на этот веб-сайт (я написал это на своем домашнем компьютере, к которому я не могу получить доступ с того места, где я сейчас нахожусь)