我有一个来自数据库的RTF格式的字符串。字符串如下:
{\rtf1\ansi\ansicpg1252\uc1\htmautsp\deff2{\fonttbl{\f0\fcharset0 Times New Roman;}{\f2\fcharset0 Segoe UI, Lucida Sans Unicode, Verdana;}}{\colortbl\red0\green0\blue0;\red255\green255\blue255;}\loch\hich\dbch\pard\plain\ltrpar\itap0{\lang1033\fs18\f2\cf0 \cf0\ql{\f2 {\ltrch This is a sentence}\li0\ri0\sa0\sb0\fi0\ql\par}
}
}
我将以下数据作为DataGrid XAML代码:
<DataGrid Name="dg">
<DataGrid.Columns>
<DataGridTextColumn Header="Col1" Binding="{Binding Col1}"/>
<DataGridTextColumn Header="Col1" Binding="{Binding Col1}"/>
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<RichTextBox>
<FlowDocument>
<Paragraph>
<Run Text="{Binding Text}" />
</Paragraph>
</FlowDocument>
</RichTextBox>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
我遇到的问题是正在显示来自数据库的值,但它是RTF格式。
我不确定如何进行转换,以便RichTextBox将显示文本的适当格式。
我有以下将数据加载到RichTextBox中的方法,但是问题是我需要首先知道RichTextBox的名称。
public static string convertString_RTF(string text, RichTextBox rtb)
{
string rtfText = text;
byte[] byteArray = Encoding.ASCII.GetBytes(rtfText);
using (System.IO.MemoryStream ms = new System.IO.MemoryStream(byteArray))
{
System.Windows.Documents.TextRange tr = new System.Windows.Documents.TextRange(rtb.Document.ContentStart, rtb.Document.ContentEnd);
tr.Load(ms, System.Windows.DataFormats.Rtf);
}
return null;
}
通过绑定在RichTextBox中显示RTF字符串的解决方案是什么?
预先感谢您的帮助。
创建自己的RichTextBox
,并引入一个新的DependencyProperty
名称TextProperty
。
public class MyRichTextBox : RichTextBox
{
public string Text
{
get { return (string)GetValue(TextProperty); }
set { SetValue(TextProperty, value); }
}
// Using a DependencyProperty as the backing store for Text. This enables animation, styling, binding, etc...
public static readonly DependencyProperty TextProperty =
DependencyProperty.Register("Text", typeof(string), typeof(MyRichTextBox), new PropertyMetadata(String.Empty, new PropertyChangedCallback(TextChanged_Handler)));
private static void TextChanged_Handler(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
RichTextBox rtb = d as RichTextBox;
byte[] array = Encoding.ASCII.GetBytes(e.NewValue.ToString());
using (MemoryStream stream = new MemoryStream(array))
{
TextRange t = new TextRange(rtb.Document.ContentStart,
rtb.Document.ContentEnd);
t.Load(stream, System.Windows.DataFormats.Rtf);
}
}
}
用法 :
<local:MyRichTextBox Margin="20" Text="{Binding RtfCol}" Width="300" Height="300" />
AttachedProperty
。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句