Возможное решение было таким же, как вы пришли, чтобы поместить документ в средство просмотра и кратко показать его на экране. Ниже приведен вспомогательный метод, который я написал, чтобы сделать это для меня.
private static string ForceRenderFlowDocumentXaml =
@"<Window xmlns=""http://schemas.microsoft.com/netfx/2007/xaml/presentation""
xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"">
<FlowDocumentScrollViewer Name=""viewer""/>
</Window>";
public static void ForceRenderFlowDocument(FlowDocument document)
{
using (var reader = new XmlTextReader(new StringReader(ForceRenderFlowDocumentXaml)))
{
Window window = XamlReader.Load(reader) as Window;
FlowDocumentScrollViewer viewer = LogicalTreeHelper.FindLogicalNode(window, "viewer") as FlowDocumentScrollViewer;
viewer.Document = document;
// Show the window way off-screen
window.WindowStartupLocation = WindowStartupLocation.Manual;
window.Top = Int32.MaxValue;
window.Left = Int32.MaxValue;
window.ShowInTaskbar = false;
window.Show();
// Ensure that dispatcher has done the layout and render passes
Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Loaded, new Action(() => {}));
viewer.Document = null;
window.Close();
}
}
Редактировать: Я просто добавил window.ShowInTaskbar = false
к методу, как если бы вы были быстры, вы могли видеть, как окно появляется на панели задач.
Пользователь никогда не «увидит» окно, поскольку оно расположено далеко за пределами экрана на Int32.MaxValue
- уловка, которая была распространена в те времена при ранней разработке мультимедиа (например, Macromedia / Adobe Director).
Для людей, которые ищут и находят этот вопрос, я могу вам сказать, что нет другого способа заставить документ отрендериться.
HTH,