複数の音符を1つの音符にマージする拡張機能を作成しています。元の音符の最後にピリオドを追加するなどの機能があります。私はあるフロードキュメントの部分を別のものにコピーし、そのようにピリオドを挿入するコードを書いています。Flowdocumentにリストをコピーすると1番目のリストアイテムが壊れる
新しい文書にリストをコピーする際に問題が発生しています。何らかの理由で、最初のlistitemは、リストの代わりにリストを先行する段落で終わります。
マイコード:以下
foreach (Block b in tempDoc.Blocks)
{
thisBlock++;
if (b is List)
{
pkhCommon.WPF.Helpers.AddBlock(b, mergedDocument);
}
else
{
Paragraph p = b as Paragraph;
foreach (Inline inl in p.Inlines)
{
if (!(inl is LineBreak))
pkhCommon.WPF.Helpers.AddInline(inl, mergedDocument);
}
if (thisElement != lastElement || thisBlock != lastBlock)
if ((bool)cb_AddPeriods.IsChecked)
pkhCommon.WPF.Helpers.AddInline(new Run(". "), mergedDocument);
else
pkhCommon.WPF.Helpers.AddInline(new Run(" "), mergedDocument);
}
}
は、ブロックをマージする機能です。 AddIline関数も同じように機能します。
public static void AddBlock(Block from, FlowDocument to)
{
if (from != null)
{
using (System.IO.MemoryStream stream = new System.IO.MemoryStream())
{
TextRange range = new TextRange(from.ContentStart, from.ContentEnd);
System.Windows.Markup.XamlWriter.Save(range, stream);
range.Save(stream, DataFormats.XamlPackage);
TextRange textRange2 = new TextRange(to.ContentEnd, to.ContentEnd);
textRange2.Load(stream, DataFormats.XamlPackage);
}
}
}
なぜ、フロードキュメントが前の段落にリスト項目を入れるかを理解できません。
xamlparse例外が発生しました。ルート要素がありません。私はこのコードを使いました: 'using(System.IO.MemoryStream stream = new System.IO.MemoryStream()) { TextRange range = new TextRange(from.ContentStart、fromContentEnd); System.Windows.Markup.XamlWriter.Save(range、stream); range.Save(stream、DataFormats.XamlPackage); ブロックb =ブロックとしてのSystem.Windows.Markup.XamlReader.Load(ストリーム)。 to.Blocks.Add(b); } ' –
私はそれを修正する最善の方法はわかりませんが、ストリームの終わりにいるように見えるので、ロードされても何もロードされません。ストリームの位置をリセットするとそれが修正されます。私の編集された答えを見てください。 – frooook
私は 'System.Windows.Markup.XamlWriter.Save(range、stream);'行も削除しなければなりませんでした。その後、それは働いた。 –