2008-10-08 91 views
7

.Net包含一个很好的控件,名为DocumentViewer。它还提供了一个用于在加载的文档中查找文本的子控件(至少它应该做什么)。WPF DocumentViewer查找函数和固定页面文档

当插入FixedPage的对象作为DocumentViewer的文档来源时,查找功能找不到任何内容。甚至没有单个字母。我还没有试过FlowDocument的呢, 为DocumentViewer文件是没有多大用处,并在网络上的资源并不实际存在,我现在要问的计算器社区:

是什么需要得到WPF DocumentViewer的查找功能与FixedPage文件一起使用?

回答

8

我在FixedDocuments中遇到了同样的问题。如果您将FixedDocument转换为XPS文档,那么它工作正常。

从FixedDocument在内存中创建XPS文档然后在DocumentViewer中显示的示例。

// Add to xaml: <DocumentViewer x:Name="documentViewer" /> 
// Add project references to "ReachFramework" and "System.Printing" 
using System; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Documents; 
using System.IO; 
using System.IO.Packaging; 
using System.Windows.Xps.Packaging; 

namespace WpfApplication1 
{ 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 

      // Set up demo FixedDocument containing text to be searched 
      var fixedDocument = new FixedDocument(); 
      var pageContent = new PageContent(); 
      var fixedPage = new FixedPage(); 
      fixedPage.Children.Add(new TextBlock() { Text = "Demo document text." }); 
      pageContent.Child = fixedPage; 
      fixedDocument.Pages.Add(pageContent); 

      // Set up fresh XpsDocument 
      var stream = new MemoryStream(); 
      var uri = new Uri("pack://document.xps"); 
      var package = Package.Open(stream, FileMode.Create, FileAccess.ReadWrite); 
      PackageStore.AddPackage(uri, package); 
      var xpsDoc = new XpsDocument(package, CompressionOption.NotCompressed, uri.AbsoluteUri); 

      // Write FixedDocument to the XpsDocument 
      var docWriter = XpsDocument.CreateXpsDocumentWriter(xpsDoc); 
      docWriter.Write(fixedDocument); 

      // Display XpsDocument in DocumentViewer 
      documentViewer.Document = xpsDoc.GetFixedDocumentSequence(); 
     } 
    } 
} 

enter image description here

+0

+1完美的工作对我来说 – 2010-07-07 16:20:55

1

我曾与在RichTextBox中搜索文本麻烦[顺便说一句,我不定制ControlTemplatesDocumentViewer使用],它是太慢了。我所做的就是每次我想要搜索时都要关注xaml。我改善了几个数量级。

这是一个很大的解决方案,基于克里斯安德森的book的一部分。

干杯