我需要将TextBlock代码的文本设置为包含格式化文本的字符串。
例如,以下字符串:
"This is a <Bold>message</Bold> with bold formatted text"
如果我以这种方式将此文本放在xaml文件中,则
<TextBlock>
This is a <Bold>message</Bold> with bold formatted text
</TextBlock>
但是,如果我使用Text属性设置它,则无效。
string myString = "This is a <Bold>message</Bold> with bold formatted text";
myTextBlock.Text = myString;
我知道我可以使用Inlines:
myTextBlock.Inlines.Add("This is a");
myTextBlock.Inlines.Add(new Run("message") { FontWeight = FontWeights.Bold });
myTextBlock.Inlines.Add("with bold formatted text");
但是问题是我从另一个来源获得了该字符串,而且我不知道如何将该字符串传递给TextBlock并查看其是否格式化。 我希望有一种方法可以直接使用格式化的字符串设置TextBlock的内容,因为我不知道如何解析该字符串以与Inlines一起使用。
答案 0 :(得分:2)
您可以从字符串中解析TextBlock并返回其内联的集合:
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:
textBlock.Inlines.AddRange(
ParseInlines("This is a <Bold>message</Bold> with bold formatted text"));
答案 1 :(得分:1)
TextBlock将不直接支持该功能,您将编写一种方法来自行解析字符串并设置内联样式。看起来并不难解析。使用正则表达式或令牌解析器。取决于您需要支持多少种样式,但是Regex是更简单的方法。