WPF C# 如何使用 Text 在 TextBlock 中设置格式化文本 属性
WPF C# How to set formatted text in TextBlock using Text property
我需要将 TextBlock 代码后面的文本设置为包含格式化文本的字符串。
例如这个字符串:
"This is a <Bold>message</Bold> with bold formatted text"
如果我以这种方式将此文本放入 xaml 文件中,它可以正常工作
<TextBlock>
This is a <Bold>message</Bold> with bold formatted text
</TextBlock>
但是如果我使用文本设置它 属性 则不起作用。
string myString = "This is a <Bold>message</Bold> with bold formatted text";
myTextBlock.Text = myString;
我知道我可以使用内联:
myTextBlock.Inlines.Add("This is a");
myTextBlock.Inlines.Add(new Run("message") { FontWeight = FontWeights.Bold });
myTextBlock.Inlines.Add("with bold formatted text");
但问题是我从另一个来源获取字符串,但我不知道如何将此字符串传递给 TextBlock 并查看是否已格式化。
我希望有一种方法可以直接使用格式化字符串设置 TextBlock 的内容,因为我不知道如何解析字符串以将其用于内联。
TextBlock 不会直接支持它,您必须自己编写一个方法来解析字符串并在内联上设置样式。看起来并不难解析。使用正则表达式或令牌解析器。取决于您需要支持多少种不同的样式,但 Regex 是更简单的方法。
您可以从您的字符串和 return 其内联集合中解析一个 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"));
我需要将 TextBlock 代码后面的文本设置为包含格式化文本的字符串。
例如这个字符串:
"This is a <Bold>message</Bold> with bold formatted text"
如果我以这种方式将此文本放入 xaml 文件中,它可以正常工作
<TextBlock>
This is a <Bold>message</Bold> with bold formatted text
</TextBlock>
但是如果我使用文本设置它 属性 则不起作用。
string myString = "This is a <Bold>message</Bold> with bold formatted text";
myTextBlock.Text = myString;
我知道我可以使用内联:
myTextBlock.Inlines.Add("This is a");
myTextBlock.Inlines.Add(new Run("message") { FontWeight = FontWeights.Bold });
myTextBlock.Inlines.Add("with bold formatted text");
但问题是我从另一个来源获取字符串,但我不知道如何将此字符串传递给 TextBlock 并查看是否已格式化。 我希望有一种方法可以直接使用格式化字符串设置 TextBlock 的内容,因为我不知道如何解析字符串以将其用于内联。
TextBlock 不会直接支持它,您必须自己编写一个方法来解析字符串并在内联上设置样式。看起来并不难解析。使用正则表达式或令牌解析器。取决于您需要支持多少种不同的样式,但 Regex 是更简单的方法。
您可以从您的字符串和 return 其内联集合中解析一个 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"));