2010-01-25 119 views
8

當您嘗試在XAML中構造FixedDocument時,Visual Studio顯示錯誤a well-known bug。例如,下面的片段WPF:Visual Studio 2008設計器中的FixedDocument

<DocumentViewer> 
    <FixedDocument> 
     <PageContent> 
      <FixedPage Width="21.0cm" Height="29.7cm"> 
       <TextBlock>Hello World!</TextBlock> 
      </FixedPage> 
     </PageContent> 
    </FixedDocument> 
</DocumentViewer> 

編譯和運行完全正常,但Visual Studio顯示錯誤列表(Property 'Pages' does not support values of type 'PageContent'.)這是很煩人的錯誤。

我正在尋找一種解決方案,該解決方案允許我在Visual Studio中的XAML文件中構建文檔而不會收到該錯誤消息。我找到了一種解決方法,我想在下面分享這個答案,但我很好奇,如果有更好的(更優雅的)解決方案。

回答

3

我知道這已經回答了,但我覺得這個答案是更好,因爲它不要求你添加一個DocumentView。

如果有一種方法可以通過密鑰名稱引用資源並將它們放入帶有XAML的FixedDocument中,請讓我知道。我似乎無法找到辦法做到這一點,但也許這是可能的。

用途:

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

擴展方法:

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); 
      } 
     } 
    } 
} 

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> 
4

作爲一種變通方法,我把的DocumentViewer以及 頁分成一格:

<Grid> 
    <FixedPage Width="21.0cm" Height="29.7cm" x:Name="uiPage1"> 
     <TextBlock>Hello World!</TextBlock> 
    </FixedPage> 
    <DocumentViewer> 
     <FixedDocument x:Name="uiReport"> 
     </FixedDocument> 
    </DocumentViewer> 
</Grid> 

然後我的頁面連接到的DocumentViewer在Loaded 事件窗口:

VB例如:

DirectCast(Me.uiPage1.Parent, Grid).Children.Remove(Me.uiPage1) 
Dim content As New PageContent() 
DirectCast(content, IAddChild).AddChild(Me.uiPage1) 
Me.uiReport.Pages.Add(content) 

C#示例:

((Grid)uiPage1.Parent).Children.Remove(uiPage1); 
var content = new PageContent(); 
((IAddChild)content).AddChild(uiPage1); 
uiReport.Pages.Add(content); 
相關問題