代码之家  ›  专栏  ›  技术社区  ›  Jeson Martajaya

WPF如何将FlowDocument BGImage转换为FixedDocument并在DocumentViewer中显示?

  •  2
  • Jeson Martajaya  · 技术社区  · 11 年前

    我有一个带有背景图像的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;
        }
    
    1 回复  |  直到 9 年前
        1
  •  1
  •   dbc    11 年前

    你写了

    我有一个带有背景图像的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 以使背景图像重复。