Control RichTextBox personalizado

En mi aplicación de Windows Phone utilizo un RichTextBox Control. Tengo un texto muy largo, por lo que el control estándar muestra solo una parte.

En internet he encontrado esta solución: Creando-Textblock-desplazable-para-WP7 - eso me puede ayudar. Separa bloques y crea un TextBlock para cada uno de los bloques de texto. Pero, ¿cómo puedo hacer esto para un RichTextBox? ¿Es posible porque RichTextBox en mi caso contiene muchos bloques?

preguntado el 04 de julio de 12 a las 09:07

1 Respuestas

Puede resolver esto agregando varios controles RichTextBox dentro de un panel de pila o un visor de desplazamiento. Debe calcular el tamaño de RichTextBox mientras agrega cada bloque de texto. Siempre que el tamaño parezca exceder los 2048 píxeles de alto/ancho, debe agregar el texto en un nuevo bloque de texto enriquecido.

Encuentre el siguiente código de muestra para TextBlock implementado de la misma manera.

Paso 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>

Paso 2:

Simplemente invoque el método ProcessTextLength() mientras carga la página.

 private void ProcessTextLength(string story) { string storytext = story.Replace("\n\n", "\n\n^"); Lista storylist = storytext.Split('^').ToList(); Lista finalstorylist = new List(); cadena texto actual = ""; foreach (elemento var en la lista de historias) { texto actual = this.StorytextBlock.Text; this.StorytextBlock.Text = this.StorytextBlock.Text + elemento; if(this.StorytextBlock.ActualHeight > 2048) { finalstorylist.Add(currenttext); this.StorytextBlock.Text = elemento; } if (storylist.IndexOf(item) == storylist.Count - 1) { finalstorylist.Add(this.StorytextBlock.Text); } } this.StorytextBlock.Text = ""; foreach (var finalitem en finalstorylist) { string text = finalitem; if (texto.ComienzaCon("\n\n")) texto = texto.Subcadena(2); if (texto.EndsWith("\n\n")) texto = texto.Remove(texto.Longitud - 2); this.textBlockStackPanel.Children.Add(nuevo TextBlock { MaxHeight = 2048, TextWrapping = TextWrapping.Wrap, FontSize = 24, TextTrimming = TextTrimming.WordEllipsis, FontFamily = new FontFamily("Segoe WP"), Text = text, Foreground = new SolidColorBrush (Color.FromArgb(255,70,70,70)) }); } }

Esto resolverá su problema. Por favor marca como respuesta si esto realmente te ayudó.

Gracias Kamal.

Respondido 04 Jul 12, 11:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.