我有一个带背景图像的FlowDocument。目前它在FlowDocumentReader中无法正确显示,因为当文档向上和向下滚动时背景图像保持居中。如何将此FlowDocument转换为FixedDocument并在DocumentViewer中显示它,因此背景图像也将被修复?
我使用here中的转换逻辑。但它不显示FlowDocument.Background图像。
private FixedDocument convert(FlowDocument flowDocument)
{
if (flowDocument == null)
return null;
var paginator = ((IDocumentPaginatorSource)flowDocument).DocumentPaginator;
var package = Package.Open(new MemoryStream(), FileMode.Create, FileAccess.ReadWrite);
var packUri = new Uri("pack://temp.xps");
PackageStore.RemovePackage(packUri);
PackageStore.AddPackage(packUri, package);
var xps = new XpsDocument(package, CompressionOption.NotCompressed, packUri.ToString());
XpsDocument.CreateXpsDocumentWriter(xps).Write(paginator);
FixedDocument doc = xps.GetFixedDocumentSequence().References[0].GetDocument(true);
return doc;
}
答案 0 :(得分:1)
你写了
我有一个带背景图像的FlowDocument。目前它在FlowDocumentReader中无法正确显示,因为当文档向上和向下滚动时背景图像保持居中。
不完全是您的具体问题的答案,但要避免这种情况,请将ImageBrush.ViewportUnits
设置为BrushMappingMode.Absolute
。然后,将ImageBrush.Viewport
设置为背景图片的所需尺寸:
<FlowDocumentReader ViewingMode="Scroll">
<FlowDocument>
<FlowDocument.Background>
<ImageBrush TileMode="Tile" Stretch="Fill" Viewport="0,0,1000,400" ViewportUnits="Absolute">
<ImageBrush.ImageSource>
<!--Image source here...-->
</ImageBrush.ImageSource>
</ImageBrush>
可选择将ImageBrush.Stretch
设置为Stretch.Fill
以使用您的图片填充指定的视口,并将ImageBrush.TileMode
设置为TileMode.Tile
以重复显示背景图片。