2009-11-04 13 views
7

Ich weiß, dass TextBlock ein FlowDocument präsentieren kann, zum Beispiel:Einstellung WPF Text TextBlock-

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

Ich würde gerne wissen, wie ein FlowDocument zu setzen, die zu einem TextBlock in einer Variablen gespeichert ist. Ich suche so etwas wie:

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

jedoch das Ergebnis des obigen Code ist, dass der XAML Text unparsed präsentiert wird.


EDIT: Ich denke, meine Frage nicht klar genug war. Was ich wirklich achive versuchen, ist:

  1. Die Benutzereingabe einen Text in eine RichTextBox.
  2. Die Anwendung speichert die Benutzereingabe als FlowDocument von der RichTextBox und serialisiert sie auf der Festplatte.
  3. Die FlowDocument wird von der Festplatte in die Variable text deserialisiert.
  4. Jetzt möchte ich in der Lage sein, den Benutzertext in einem TextBlock zu präsentieren.

daher so weit wie ich verstehe, ein neues Run Objekt erstellen und die Parameter manuell einstellen werden mein Problem nicht lösen.


Das Problem ist, dass die Serialisierung RichTextBoxAbschnitt Objekt erstellt, die ich nicht-TextBlock.Inlines hinzufügen können. Daher ist es nicht möglich, das deserialisierte Objekt auf TextProperty von TextBlock festzulegen.

Antwort

3

Ich weiß, dass TextBlock- Flowdocument präsentieren

Was Sie denken, dass macht? Ich denke nicht, dass es wahr ist ... Der Inhalt einer TextBlock ist die Inlines Eigenschaft, die eine InlineCollection ist. So kann es nur Inline s enthalten ...Aber in einer FlowDocument ist der Inhalt die Blocks Eigenschaft, die Instanzen von Block enthält. Und ein Block ist kein Inline

5

erstellen und das Objekt hinzufügen, wie unten:

 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

wahre Cannibal. Vielen Dank. :) – Blounty

+0

Vielen Dank für die Lösung. Bitte sehen Sie meine Bearbeitung. – Elad

0

Wenn Ihre Flowdocument deserialisiert wird, bedeutet dies, dass Sie ein Objekt vom Typ haben FlowDocument, nicht wahr? Versuchen Sie, die Text-Eigenschaft Ihres TextBlock auf diesen Wert festzulegen. Natürlich können Sie dies nicht mit txtFont.Text = ... tun, da dies nur für Strings funktioniert. Für andere Arten von Objekten, müssen Sie die DependencyProperty direkt setzen:

txtFont.SetValue(TextBlock.TextProperty, myFlowDocument) 
0

Hier ist, wie wir das Aussehen eines Textblocks durch die Zuweisung eines Stils on-the-Fly einstellen.

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

Sie können den Stil Abschnitt beseitigen und legen Sie die Eigenschaften direkt, aber wir mögen es, Dinge gebündelt im Stil halten uns zu helfen, den Blick während des gesamten Projekts zu organisieren.

textBlock_DealerMessage.FontWeight = thisWeight; 

HTH.

Verwandte Themen