0

私の Windows Phone アプリケーションでは、RichTextBox コントロールを使用しています。テキストが非常に長いため、標準コントロールではその一部しか表示されません。

インターネットで私はこの解決策を見つけました:Creating-scrollable-Textblock-for-WP7 - それは私を助けることができます. ブロックを分離し、テキスト ブロックごとに TextBlock を作成します。しかし、RichTextBox に対してこれを行うにはどうすればよいでしょうか。私の場合、RichTextBoxには多くのブロックが含まれているため、可能ですか?

4

1 に答える 1

3

これを解決するには、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))                                                             
                                                          });                
            }       
        }

これで問題が解決します。これが本当に役立つ場合は、回答としてマークしてください。

ありがとうカマル。

于 2012-07-04T10:44:55.273 に答える