我知道在XAML中添加text / content / DataContext时,您可以参考资源字典或内联标记,以便在文本或模板中进行样式设置。
问: 但是,我在尝试寻找以下方法时遇到了麻烦:
数据来自从数据库中提取的视图模型/模型。
(字符串值)
I am a <Bold>smart</Bold> man.
在这样的流程文档中显示:
我是智能男人。
Q end
通过绑定到转换器,行为,还是将我放在流文档中的段落/文档保存到内存流中的.rtf文件是更好的选择?
我已尝试使用列出的行为选项&gt; here&lt;但这适用于文本块,无法重定向类型文本而不是文本块。
试图简化它。
尝试使用数据绑定并应用转换器,但即使我有行为/转换器的资源,它也可以通过类型转换工作。
答案 0 :(得分:0)
Rockford Lhotka在帖子Set rich text into RichTextBlock control中提出了一个聪明的解决方案。他的想法是创建一个自定义控件,然后使用XamlReader.Load创建RichTextBlock。
这允许您使用如下代码:
<local:RichTextDisplay Xaml="{Binding Hello}" HorizontalAlignment="Center"
VerticalAlignment="Center"/>
Hello是:
public string Hello { get; set; } = "I am a <Bold>smart</Bold> man.";
结果:
如果您使用UWP / Win 8.1 XAML,您可以使用博客文章中的原始代码进行以下小改动(添加了段落):
<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>
");
答案 1 :(得分:0)
回答我自己的问题: 我的情况是创建一个文档样式显示,供用户更新并另存为PDF,但我并不想依赖Office在我们的应用服务器上。
所以我通过使用完整的&#34; doc.RTF&#34;来解决这个问题。记录并将其作为内存流/字符串导入,并将值所需的更新应用于该文件。
即。 VB.net代码段示例
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
然后我将带有该内存流的XAML Rich Text Box加载为DataFormats.Rtf。
RichTextBox1.SelectAll()
RichTextBox1.Selection.Load(ClassName.RTFDataProperty, DataFormats.Rtf)
这为我提供了该文档格式和布局的模板。 (更多案例场景而非正常做法)
我也想申请一个首发选择,所以这就是我在那里所做的:
'--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
这是一个简单的VB.net代码布局,但如果你发现它有用,你可以从那里进行简化和调整。
由于