Dot-Net
WPF:Visual Studio 2008 設計器中的 FixedDocument
當您嘗試在 XAML中構造 a 時,Visual Studio 會顯示錯誤,這是一個眾所周知的錯誤。
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 文件中建構我的文件,而不會收到該錯誤消息。我找到了一種解決方法,我想在下面分享它作為答案,但我很好奇是否有更好(更優雅)的解決方案。
我知道這已經得到了回答,但我認為這個答案更好,因為它不需要您添加 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>
作為一種解決方法,我將 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>
Loaded然後我在視窗事件中將頁面附加到 DocumentViewer :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);