WPF:Visual Studio 2008 Designer中的FixedDocument

Hei*_*nzi 8 .net wpf documentviewer fixeddocument visual-studio-2008

当您尝试在XAML中构建一个Visual Studio时,Visual Studio会显示错误,这是一个众所周知的错误FixedDocument.例如,以下代码段

<DocumentViewer>
    <FixedDocument>
        <PageContent>
            <FixedPage Width="21.0cm" Height="29.7cm">
                <TextBlock>Hello World!</TextBlock>
            </FixedPage>
        </PageContent>
    </FixedDocument>
</DocumentViewer>
Run Code Online (Sandbox Code Playgroud)

编译并运行完美,但Visual Studio在错误列表中显示错误(Property 'Pages' does not support values of type 'PageContent'.)这很烦人.

我正在寻找一种解决方案,允许我在Visual Studio中的XAML文件中构建我的文档,而不会收到该错误消息.我找到了一个解决方法,我想在下面分享作为答案,但我很好奇是否有一个更好(更优雅)的解决方案.

小智 3

我知道这个问题已经得到了回答,但我认为这个答案更好,因为它不需要您添加 DocumentView。

如果有一种方法可以通过键名称引用资源并使用 XAML 将它们放入固定文档中,请告诉我。我似乎找不到办法做到这一点,但也许这是可能的。

使用:

var doc = System.Windows.Application.LoadComponent(new Uri("/FixedDocumentExample.xaml", UriKind.Relative)) as FixedDocument;
doc.AddPages();
Run Code Online (Sandbox Code Playgroud)

扩展方法:

using System.Collections;
using System.Windows.Documents;

public static class FixedDocumentExtended {
    public static void AddPages(this FixedDocument fixedDocument) {
        var enumerator = fixedDocument.Resources.GetEnumerator();
        while (enumerator.MoveNext()) {
            var pageContent = ((DictionaryEntry)enumerator.Current).Value as PageContent;
            if (pageContent != null) {
                fixedDocument.Pages.Add(pageContent);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

XAML:

<FixedDocument
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <FixedDocument.Resources>
        <PageContent x:Key="page1">
            <FixedPage Width="793.76" Height="1122.56">
                <TextBlock Margin="50" Text="Page 1"/>
            </FixedPage>
        </PageContent>
        <PageContent x:Key="page2">
            <FixedPage Width="793.76" Height="1122.56">
                <TextBlock Margin="50" Text="Page 2"/>
            </FixedPage>
        </PageContent>
    </FixedDocument.Resources>
</FixedDocument>
Run Code Online (Sandbox Code Playgroud)