ユーザーが表示している FlowDocument を印刷しようとしています。(PrintDialog からの) 変更が DocumentViewer に反映されないように、元のドキュメントのコピーを作成するルーチンを作成しました。
残念ながら、私のコピーはそのフィールドにバインドされたすべての情報を失ったようです。DataContext をリセットしようとしましたが、コピーの IsLoaded プロパティがまだ false に戻っているため、バインドが行われていないと思われます。
何か案は?
ドキュメントをコピーするために使用しているコードは次のとおりです。
private static void AddDocument(FlowDocument from, FlowDocument to)
{
TextRange tr = new TextRange(from.ContentStart, from.ContentEnd);
using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
{
TextRange tr2 = null;
System.Windows.Markup.XamlWriter.Save(tr, ms);
tr.Save(ms, DataFormats.XamlPackage, true);
tr2 = new TextRange(to.ContentEnd, to.ContentEnd);
tr2.Load(ms, DataFormats.XamlPackage);
}
}
ドキュメントを印刷するために使用しているコードは次のとおりです。
public static void PrintFlowDocument(FlowDocument fd, string title)
{
PrintDialog pd = new PrintDialog();
IDocumentPaginatorSource idps = null;
FlowDocument flowDoc = new FlowDocument();
AddDocument(fd, flowDoc);
flowDoc.DataContext = fd.DataContext;
flowDoc.PageHeight = pd.PrintableAreaHeight;
flowDoc.PageWidth = pd.PrintableAreaWidth;
flowDoc.PagePadding = new Thickness(50);
flowDoc.ColumnGap = 0;
flowDoc.ColumnWidth = pd.PrintableAreaWidth;
idps = flowDoc;
if (pd.ShowDialog() == true)
{
pd.PrintDocument(idps.DocumentPaginator, title);
}
}
前もってありがとう、
ソニー