Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF C#如何使用text属性在TextBlock中设置格式化文本_C#_Wpf_Textblock - Fatal编程技术网

WPF C#如何使用text属性在TextBlock中设置格式化文本

WPF C#如何使用text属性在TextBlock中设置格式化文本,c#,wpf,textblock,C#,Wpf,Textblock,我需要将文本块代码的文本设置为包含格式化文本的字符串 例如,此字符串: "This is a <Bold>message</Bold> with bold formatted text" 但问题是,我从另一个源获取的字符串是原样的,我不知道如何将该字符串传递到TextBlock并查看是否格式化。 我希望有一种方法可以直接用格式化字符串设置TextBlock的内容,因为我不知道如何解析字符串以将其用于内联线。TextBlock不支持直接解析,您应该自己编写一个方法来解析字

我需要将文本块代码的文本设置为包含格式化文本的字符串

例如,此字符串:

"This is a <Bold>message</Bold> with bold formatted text"
但问题是,我从另一个源获取的字符串是原样的,我不知道如何将该字符串传递到TextBlock并查看是否格式化。
我希望有一种方法可以直接用格式化字符串设置TextBlock的内容,因为我不知道如何解析字符串以将其用于内联线。

TextBlock不支持直接解析,您应该自己编写一个方法来解析字符串并在内联线上设置样式。看起来没那么难解析。使用正则表达式或令牌解析器。取决于您需要支持多少种不同的样式,但Regex是更简单的方法。

您可以从字符串中解析文本块并返回其内联线的集合:

private IEnumerable<Inline> ParseInlines(string text)
{
    var textBlock = (TextBlock)XamlReader.Parse(
        "<TextBlock xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\">"
        + text
        + "</TextBlock>");

    return textBlock.Inlines.ToList(); // must be enumerated
}
private IEnumerable ParseInlines(字符串文本)
{
var textBlock=(textBlock)XamlReader.Parse(
""
+正文
+ "");
return textBlock.Inlines.ToList();//必须枚举
}
然后将集合添加到文本块:

textBlock.Inlines.AddRange(
    ParseInlines("This is a <Bold>message</Bold> with bold formatted text"));
textBlock.Inlines.AddRange(
ParseInlines(“这是一条带有粗体格式文本的消息”);

看起来您正试图从另一个应用程序(Microsoft Word?)复制格式化文本并将其粘贴到文本块中,这是一个正确的假设吗?我从另一个应用程序获得此字符串,但不是通过复制/过去获得的,而是通过TCP连接获得的。收到此字符串时如何格式化?它看起来会像“这是一条带有粗体格式文本的消息”吗?在我的示例中,我也可以得到不同格式的字符串。或。我不知道这有什么用,但它给了我这个选择。这也是我的建议,谢谢你的回答。我可以接收各种格式的字符串,包括斜体、下划线、字体大小、字体名称、颜色等等,我不知道如何解析所有这些内容。我希望有一些解析器可以完成这项工作,而无需花费数天时间重新发明轮子。@user2272143这些是html标记还是类似的标准?我可以使用不同的标准xaml、html。。。当我得到xaml格式,并通过xaml文件中的字符串时,它的格式是正确的。问题是我需要在后面执行此代码。@user2272143使用RichTextBox并解析FlowDocument,如下所示:stackoverflow.com/a/27957828/1136211。不需要自己做任何分析。是的!这太完美了!非常感谢你!您的示例可以很好地使用普通的TextBlock,但是我使用这个实现,我担心它没有内联线。你知道我如何向这段代码添加内联线吗?好吧,这个实现不了解WPF文档特性的任何内容,即System.Windows.Documents中的内容。您不能将其用于如问题所示格式的文本。我不知道如何轻松添加此功能。@user2272143我会从另一个角度来处理它。将大纲添加到此解决方案中。大纲正在运行并将文本转换为路径。内联线可以承载路径。因此,在对文本调用ParseInlines之前,您需要将要列出的文本块转换为路径,并将它们注入到流文档中。@SledgeHammer谢谢您的建议。。。我有一个这样的解决方案,但是这样的话,当文本的一部分有不同的格式时,我的路径与文本不匹配。现在我正在处理另一个示例,我已经修改它来迭代内联线,但是我在对齐路径和文本时遇到了一些问题。然而,由于这是一个不同的问题,明天我将提出另一个问题。谢谢你的帮助!
myTextBlock.Inlines.Add("This is a");
myTextBlock.Inlines.Add(new Run("message") { FontWeight = FontWeights.Bold });
myTextBlock.Inlines.Add("with bold formatted text");
private IEnumerable<Inline> ParseInlines(string text)
{
    var textBlock = (TextBlock)XamlReader.Parse(
        "<TextBlock xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\">"
        + text
        + "</TextBlock>");

    return textBlock.Inlines.ToList(); // must be enumerated
}
textBlock.Inlines.AddRange(
    ParseInlines("This is a <Bold>message</Bold> with bold formatted text"));