2017-03-24 2 views
0

Ich weiß, dass beim Hinzufügen von text/content/DataContext in XAML verweisen Sie auf Ressourcenwörterbuch oder Inline-Markup für Styling um Text oder in Vorlage.Textformatierung von String auf Text anwenden für FlowDocument in richtextbox

Q: jedoch Probleme Ich habe versucht, einen Weg zu finden, die folgenden zu tun:

Daten kommen aus einer Ansicht Modell/Typ, die aus einer Datenbank gezogen wird.

(Stringwert) I am a <Bold>smart</Bold> man.

in einem Fluss Dokument wie diese zeigen:

Ich bin ein Smart Mann.

Q Ende

Entweder durch einen Konverter, Verhalten zu binden, oder würde den Absatz/Dokument speichern, die ich im Flow-Dokument in eine RTF-Datei in Speicher-Stream setzte eine bessere Option?

Ich habe versucht, die Option für das Verhalten aufgeführt>here < zu verwenden, aber das ist für Textblock und kann nicht für Text anstelle von Textblock umleiten.

Der Versuch, es zu rationalisieren.

Versucht, Datenbindung zu verwenden und den Konverter anzuwenden, aber obwohl ich die Ressource für das Verhalten/Konverter habe, funktioniert es aufgrund der Typkonvertierung.

Antwort

0

Um meine eigene Frage zu beantworten: Mein Fall wurde eine Dokument Stil Anzeige für Benutzer erstellen als PDF zu aktualisieren und zu speichern, aber ich wollte nicht darauf verlassen, Büro sein auf unserem Anwendungsserver.

Also löste ich dies in meinem Fall mit einem vollständigen "doc.RTF" -Dokument und importieren Sie das als Speicher-Stream/String und wenden Sie meine benötigten Updates für Werte an.

d.h. VB.Netto-Snippet Beispiel

Using uStream = Assembly.GetExecutingAssembly.GetManifestResourceStream("Resourcefilepath.rtf") 
    Using mStream As system.IO.MemoeryStream = New MemoryStream() 
     uStream.CopyTo(mStream) 
     rtfstring = Encoding.UTF8.GetSTring(mStream.toArray()) 
     '--Do the updates to the needed string as needed: 
     rtfstring.Replace("Value","UpdatedValue") 
     '--Load Property Memory String this method is returnind 
     RTFDataProperty = New MemoryStream(Encoding.UTF8.GetBytes(rtfstring)) 
    End Using 
End Using 

Dann lud ich meine XAML Rich-Text-Box mit dem Speicher-Stream als DataFormats.Rtf.

RichTextBox1.SelectAll() 
RichTextBox1.Selection.Load(ClassName.RTFDataProperty, DataFormats.Rtf) 

Dies gab mir eine Vorlage für die Formatierung und das Layout des Dokuments. (Mehr ein Case-Szenario und keine normale Praxis)

Ich wollte auch einen Start Auswahl anzuwenden, so hier ist das, was ich da tat

'--Get my RichTextBox Text 
rtbtext As String = New TextRange(RichTextBox1.Document.contentStart, RichTextbox1.Document.ContentEnd).Text 
Dim strStartSelection As String = "Comments..." 
Dim startTP As TextPointer 
Dim endTP As TextPointer 

'--Loop through the paragraphs of the richtextbox for my needed selection starting point: 
For Each para As Paragraph In RichTextBox1.Document.Blocks 
    Dim paraText As String = New TextRange(para.ContentStart, para.ContentEnd).Text 
    If paraText = "" Then 
     Dim pos As TextPointer = para.ContentStart 
     startTP = pos 
     endTP = startTP.GetPositionAtOffset("".Length + 3) '--my string had ... on the end so had to add for avoiding the escape of that on length 
     RichTextBox1.Selection.Select(startTP, endTP) 
     RichTextBox1.Focus() 
     Exit For 
    End If 
Next 

Dies ist das einfache VB.net Code-Layout, aber Sie können von dort aus vereinfachen und anpassen, wenn Sie es nützlich finden.

Dank

0

Eine clevere Lösung wird von Rockford Lhotka in Post Set rich text into RichTextBlock control vorgestellt. Seine Idee ist es, ein benutzerdefiniertes Steuerelement zu erstellen, das dann den RichTextBlock mit XamlReader.Load erstellt.

Auf diese Weise können Sie Code verwenden, wie folgt aus:

<local:RichTextDisplay Xaml="{Binding Hello}" HorizontalAlignment="Center" 
          VerticalAlignment="Center"/> 

Wo Hallo ist:

public string Hello { get; set; } = "I am a <Bold>smart</Bold> man."; 

Mit einem Ergebnis:

Output xaml bold RichTextBlock

Wenn Sie UWP verwenden/Win 8.1 XAML, können Sie den ursprünglichen Code aus dem Blogpost mit den folgenden verwenden kleine Änderung (Absätze hinzugefügt):

<UserControl 
    xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"" 
    xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"" 
    xmlns:mc=""http://schemas.openxmlformats.org/markup-compatibility/2006""> 
    <Grid> 
    <RichTextBlock><Paragraph>"); 
      xaml.Append(ctl.Xaml); 
      xaml.Append(@" 
    </Paragraph></RichTextBlock> 
    </Grid> 
</UserControl> 
"); 
+0

Der obige Vorschlag wird nicht funktionieren, da die XamlReader.Load nimmt Bach, XamlReader oder XmlReader, die nicht zugeordnet ist. –