これを解決するには、stackpanel または scrollviewer 内に複数の RichTextBox コントロールを追加します。テキストの各ブロックを追加するときに、RichTextBox のサイズを計算する必要があります。サイズが高さ/幅で 2048 ピクセルを超えていると思われる場合は、新しいリッチ テキスト ブロックにテキストを追加する必要があります。
同じ方法で実装された TextBlock の以下のサンプル コードを見つけます。
ステップ1:
<pre>
<ScrollViewer Margin="10,0,0,70">
<StackPanel Grid.Row="4" Margin="0,-36,12,12" x:Name="textBlockStackPanel">
<TextBlock x:Name="StorytextBlock" Margin="0,0,12,12" MaxHeight="2048" TextWrapping="Wrap" FontSize="24" TextTrimming="WordEllipsis" FontFamily="Segoe WP" d:LayoutOverrides="Width" Foreground="#FF464646" />
</StackPanel>
</ScrollViewer>
</pre>
ステップ2:
ページの読み込み中に ProcessTextLength() メソッドを呼び出すだけです。
private void ProcessTextLength(文字列ストーリー)
{
string storytext = story.Replace("\n\n", "\n\n^");
list storylist = storytext.Split('^').ToList();
リスト finalstorylist = new List();
文字列 currenttext = "";
foreach (ストーリーリストの変数項目)
{
currenttext = this.StorytextBlock.Text;
this.StorytextBlock.Text = this.StorytextBlock.Text + item;
if(this.StorytextBlock.ActualHeight > 2048)
{
finalstorylist.Add(現在のテキスト);
this.StorytextBlock.Text = item;
}
if (storylist.IndexOf(item) == storylist.Count - 1)
{
finalstorylist.Add(this.StorytextBlock.Text);
}
}
this.StorytextBlock.Text = "";
foreach (finalstorylist の var finalitem)
{
文字列テキスト = 最終項目;
if (text.StartsWith("\n\n"))
テキスト = text.Substring(2);
if (text.EndsWith("\n\n"))
text = text.Remove(text.Length - 2);
this.textBlockStackPanel.Children.Add(新しい TextBlock
{
最大高さ = 2048、
TextWrapping = TextWrapping.Wrap,
フォントサイズ = 24、
TextTrimming = TextTrimming.WordEllipsis,
FontFamily = new FontFamily("Segoe WP"),
テキスト = テキスト、
Foreground = new SolidColorBrush(Color.FromArgb(255,70,70,70))
});
}
}
これで問題が解決します。これが本当に役立つ場合は、回答としてマークしてください。
ありがとうカマル。