C# 构建具有粗体和斜体标记文本的框架元素的最简单方法是什么?
有没有更优雅的方法来完成以下任务? 基本上,我需要一种简单的方法来编程地构建一个C# 构建具有粗体和斜体标记文本的框架元素的最简单方法是什么?,c#,wpf,xaml,bold,italic,C#,Wpf,Xaml,Bold,Italic,有没有更优雅的方法来完成以下任务? 基本上,我需要一种简单的方法来编程地构建一个WrapPanel(或其他框架元素): 正确包裹 允许某些单词有粗体文本 允许某些单词具有斜体文本 允许其他格式,例如颜色、背景 理想的方法是将例如“这是粗体,这是斜体文本。”转换为适当的框架元素,以便我可以将其添加到堆栈面板中并显示它 代码: 编辑:我在另一个答案中发现,TextBlock也有一个内联线集合,可以向其中添加Runs。巧妙地使用附加属性作为一种转换器 我认为适合您的是FlowDocumentSc
WrapPanel
(或其他框架元素):
- 正确包裹
- 允许某些单词有粗体文本
- 允许某些单词具有斜体文本
- 允许其他格式,例如颜色、背景
- 理想的方法是将例如“
”转换为适当的框架元素,以便我可以将其添加到堆栈面板中并显示它这是粗体,这是斜体文本。
编辑:我在另一个答案中发现,
TextBlock
也有一个内联线
集合,可以向其中添加Run
s。巧妙地使用附加属性作为一种转换器
我认为适合您的是
FlowDocumentScrollViewer
和FlowDocument
。我稍微描述一下通过IValueConverter
手动创建一个
您可能会使用与示例中所示类似的助手函数,但是FlowDocument
已经非常类似于HTML,可以轻松地处理包装
将段落
s添加到流程文档
,将运行
s添加到段落
,每个运行
都源自文本元素
,因此它具有许多与文本块
相同的属性
FlowDocument doc = new FlowDocument();
Paragraph par = new Paragraph();
doc.Blocks.Add( par );
Run r;
r = new Run( "This is " );
par.Inlines.Add( r );
r = new Run( "bold" );
r.FontWeight = FontWeights.Bold;
par.Inlines.Add( r );
r = new Run( " and this is " );
par.Inlines.Add( r );
r = new Run( "italic" );
r.FontStyle = FontStyles.Italic;
par.Inlines.Add( r );
r = new Run( " text." );
par.Inlines.Add( r );
此外,如果格式化子字符串仍将限于粗体/斜体标记或其他一些非常简单的标记,则使用
Regex.Split()
可能是从单个字符串确定单独的运行的最简单方法。它允许您将一个字符串拆分为多个字符串,但保留您的“分隔符”。编辑:我在另一个回答中发现,TextBlock
也有一个内联线
集合,可以向其中添加Run
s。巧妙地使用附加属性作为一种转换器
我认为适合您的是FlowDocumentScrollViewer
和FlowDocument
。我稍微描述一下通过IValueConverter
手动创建一个
您可能会使用与示例中所示类似的助手函数,但是FlowDocument
已经非常类似于HTML,可以轻松地处理包装
将段落
s添加到流程文档
,将运行
s添加到段落
,每个运行
都源自文本元素
,因此它具有许多与文本块
相同的属性
FlowDocument doc = new FlowDocument();
Paragraph par = new Paragraph();
doc.Blocks.Add( par );
Run r;
r = new Run( "This is " );
par.Inlines.Add( r );
r = new Run( "bold" );
r.FontWeight = FontWeights.Bold;
par.Inlines.Add( r );
r = new Run( " and this is " );
par.Inlines.Add( r );
r = new Run( "italic" );
r.FontStyle = FontStyles.Italic;
par.Inlines.Add( r );
r = new Run( " text." );
par.Inlines.Add( r );
此外,如果格式化子字符串仍将限于粗体/斜体标记或其他一些非常简单的标记,则使用Regex.Split()
可能是从单个字符串确定单独的运行的最简单方法。它允许您将一个字符串拆分为多个字符串,但保留“分隔符”