0

プログラムで内容を置き換えたい、Span" test1" という名前のフロードキュメントがあります。

TextRange tr = new TextRange(this.test1.ContentStart,this.test1.ContentEnd);
Run run = this.test1.Inlines.First() as Run;

run.Text = "replaced text";

これは機能しますが、問題は更新を行うときにスパンの名前が削除されることです(xamlソースを見てください)。これは設計によるものですか?IDを保持する方法はありますか?こんにちは、これは私が実際にリッチテキストボックスにあるものをデバッグするために使用する方法です(xamlソースをテキストボックスに設定します)

using (MemoryStream ms = new MemoryStream()) { tr = new TextRange(this.richTextBox1.Document.ContentStart, this.richTextBox1.Document.ContentEnd); tr.Save(ms, DataFormats.Xaml); ms.Position = 0;

            using (StreamReader sr = new StreamReader(ms))
            {
                this.textBox1.Text = sr.ReadToEnd();
            }
        }

これは、リッチテキスト ボックスのテスト コンテンツです。

<FlowDocument>
        <Paragraph>
            This is my first  <Span Name="test1">a huge amount of space</Span> between it and the second paragraph?
        </Paragraph>
    </FlowDocument>
4

1 に答える 1

0

残念ながら、これは FlowDocuments が機能する方法です (タグと同じ)。これに対して私が見つけた唯一の (非常にハックな) 解決策は、FontFamily プロパティで名前を非表示にすることです。これが機能するのは、このプロパティが文字列のコンマ区切りリストであり、既存のフォント ファミリに一致する最初の文字列が使用され、残りは無視されるためです。したがって、次のようなことをすると:

document.FontFamily = "RealFont1, RealFont2, name=test1";

文字列全体が保持されます。次に、FontFamily で「name=」を検索して、「name」にアクセスできます。

繰り返しますが、非常にハックですが、何ヶ月も試した後、私が見つけた唯一の解決策でした.

于 2013-02-24T19:43:22.480 に答える