2009-11-04 20 views
7

sé que TextBlock puede presentar un FlowDocument, por ejemplo:Ajuste de texto WPF a TextBlock

<TextBlock Name="txtFont"> 
    <Run Foreground="Maroon" FontFamily="Courier New" FontSize="24">Courier New 24</Run> 
</TextBlock> 

me gustaría saber cómo configurar un FlowDocument que se almacena en una variable a un TextBlock. Busco algo como:

string text = "<Run Foreground="Maroon" FontFamily="Courier New" FontSize="24">Courier New 24</Run>" 
txtFont.Text = text; 

Sin embargo, el resultado del código anterior es que el texto se presenta XAML no analizada.


EDIT: Creo que mi pregunta no era lo suficientemente claro. Lo que realmente estoy tratando de achive es:

  1. La entrada del usuario un texto en un RichTextBox.
  2. La aplicación guarda la entrada del usuario como FlowDocument del RichTextBox y la serializa en el disco.
  3. FlowDocument se deserializa desde el disco a la variable texto.
  4. Ahora, me gustaría poder presentar el texto del usuario en un TextBlock.

Por lo tanto, por lo que yo entiendo, la creación de un nuevo objeto Ejecutar y configurar los parámetros de forma manual no va a resolver mi problema.


El problema es que la serialización RichTextBox crea Sección objeto, que no puedo añadir a TextBlock.Inlines. Por lo tanto, no es posible establecer el objeto deserializado en TextProperty de TextBlock.

Respuesta

3

sé que TextBlock puede presentar FlowDocument

¿Qué le hace pensar eso? No creo que sea cierto ... El contenido de un TextBlock es la propiedad Inlines, que es un InlineCollection. Por lo tanto, solo puede contener Inline s ...Pero en un FlowDocument, el contenido es la propiedad Blocks, que contiene instancias de Block. Y un Block no es un Inline

5

crear y agregar el objeto de la siguiente manera:

 Run run = new Run("Courier New 24"); 
     run.Foreground = new SolidColorBrush(Colors.Maroon); 
     run.FontFamily = new FontFamily("Courier New"); 
     run.FontSize = 24; 
     txtFont.Inlines.Add(run); 
+3

run.Foreground = Brushes.Maroon; – CannibalSmith

+0

true Cannibal. Gracias. :) – Blounty

+0

Gracias por la solución. Por favor mira mi edición. – Elad

0

Si su FlowDocument ha sido deserializado, que significa que tiene un objeto de tipo FlowDocument, ¿verdad? Intente establecer la propiedad Text de su TextBlock a este valor. Por supuesto, no puede hacer esto con txtFont.Text = ..., ya que esto solo funciona para cadenas. Para otros tipos de objetos, es necesario establecer directamente DependencyProperty:

txtFont.SetValue(TextBlock.TextProperty, myFlowDocument) 
0

Así es como estamos configurando el aspecto de un bloque de texto asignando un estilo sobre la marcha.

// Set Weight (Property setting is a string like "Bold") 
    FontWeight thisWeight = (FontWeight)new FontWeightConverter().ConvertFromString(Properties.Settings.Default.DealerMessageFontWeightValue); 

    // Set Color (Property setting is a string like "Red" or "Black") 
    SolidColorBrush thisColor = (SolidColorBrush)new BrushConverter().ConvertFromString(Properties.Settings.Default.DealerMessageFontColorValue); 

    // Set the style for the dealer message 
    // Font Family Property setting is a string like "Arial" 
    // Font Size Property setting is an int like 12, a double would also work 
    Style newStyle = new Style 
    { 
     TargetType = typeof(TextBlock), 
     Setters = { 
      new Setter 
      { 
       Property = Control.FontFamilyProperty, 
       Value = new FontFamily(Properties.Settings.Default.DealerMessageFontValue) 
      }, 
      new Setter 
      { 
       Property = Control.FontSizeProperty, 
       Value = Properties.Settings.Default.DealerMessageFontSizeValue 
      }, 
      new Setter 
      { 
       Property = Control.FontWeightProperty, 
       Value = thisWeight 
      }, 
      new Setter 
      { 
       Property = Control.ForegroundProperty, 
       Value = thisColor 
      } 
     } 
    }; 

    textBlock_DealerMessage.Style = newStyle; 

Puede eliminar la sección de estilo y establecer directamente las propiedades, pero nos gusta mantener las cosas en paquete en el estilo para ayudar a organizar la mirada durante todo el proyecto.

textBlock_DealerMessage.FontWeight = thisWeight; 

HTH.

Cuestiones relacionadas