2009-11-04 7 views
7

Je sais que TextBlock peut présenter un FlowDocument, par exemple:Réglage texte WPF à TextBlock

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

Je voudrais savoir comment définir un FlowDocument qui est stocké dans une variable à un TextBlock. Je cherche quelque chose comme:

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

Cependant, le résultat du code ci-dessus est que le texte XAML est présenté unparsed.


EDIT: Je suppose que ma question n'a pas été assez clair. Ce que je veux vraiment essayer de achive est:

  1. L'entrée utilisateur un peu de texte dans un RichTextBox.
  2. L'application enregistre l'entrée utilisateur en tant que FlowDocument à partir du RichTextBox et la sérialise sur le disque.
  3. Le FlowDocument est désérialisé du disque vers la variable text. Maintenant, je voudrais pouvoir présenter le texte de l'utilisateur dans un TextBlock.

Par conséquent, pour autant que je comprends, la création d'un nouveau objet Run et le réglage des paramètres manuellement ne pas résoudre mon problème.


Le problème est que la sérialisation RichTextBox crée objet Section, que je ne peux pas ajouter à TextBlock.Inlines. Par conséquent, il n'est pas possible de définir l'objet désérialisé sur TextProperty de TextBlock.

Répondre

3

Je sais que TextBlock peut présenter FlowDocument

Qu'est-ce qui vous fait penser cela? Je ne pense pas que ce soit vrai ... Le contenu d'un TextBlock est la propriété Inlines, qui est un InlineCollection. Donc, il ne peut contenir que Inline s ...Mais dans un FlowDocument, le contenu est la propriété Blocks, qui contient des instances de Block. Et un Block n'est pas un Inline

5

créer et ajouter l'objet comme ci-dessous:

 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 = Brosses.Marque; – CannibalSmith

+0

vrai cannibale. Merci. :) – Blounty

+0

Merci pour la solution. S'il vous plaît voir mon edit. – Elad

0

Si votre FlowDocument a été désérialisée, cela signifie que vous avez un objet de type FlowDocument, non? Essayez de définir la propriété Text de votre TextBlock à cette valeur. Bien sûr, vous ne pouvez pas le faire avec txtFont.Text = ..., puisque cela ne fonctionne que pour les chaînes. Pour les autres types d'objets, vous devez définir le DependencyProperty directement:

txtFont.SetValue(TextBlock.TextProperty, myFlowDocument) 
0

Voici comment nous définissons l'apparence d'un bloc de texte en affectant un style à la volée.

// 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; 

Vous pouvez éliminer les propriétés section de style et définir directement, mais nous aimons garder les choses empaquetés dans le style pour nous aider à organiser le regard tout au long du projet.

textBlock_DealerMessage.FontWeight = thisWeight; 

HTH.

Questions connexes