WPF C# - 从 TextBlock 获取内联格式的粗体文本
WPF C# - Get inline formated bold Text from TextBlock
我正在向 StackPanel
中的 Border
个元素添加一些 TextBlock
个元素。
我通过添加 Inlines
.
添加 TextBlock
的文本并对其进行格式化
单击时,我想获取 TextBlock
的格式化文本。这是我的代码。
public void addText()
{
TextBlock myText = new TextBlock();
myText.Inlines.Add(new Bold(new Run("Hello ")));
myText.Inlines.Add("World!");
Border myBorder = new Border();
myBorder.Child = myText;
myBorder.MouseDown += new MouseButtonEventHandler(Border_Clicked);
myStackPanel.Children.Add(myBorder);
}
private void Border_Clicked(object sender, MouseButtonEventArgs e)
{
//Border senderBox = (Border)sender;
//TextBlock senderText = (TextBlock)senderBox.Child;
//Bold inline = (Bold) senderText.Inlines.ElementAt(0);
// How to Output "Hello "?
}
Border_Clicked
应该输出 "Hello "。如您所见,我可以访问粗体文本,但如何输出它?
无法控制 MessageBox 中的字体特征。我认为你应该考虑创建一个"custom MessageBox"。像这样:
<Window x:Class="WpfApplication1.CustomMessageBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
SizeToContent="WidthAndHeight" MaxWidth="400">
<Grid x:Name="GridContent" Margin="10">
</Grid>
</Window>
所以在它的构造函数中你可以发送你的粗体:
private Bold _text;
public CustomMessageBox(Bold formattedText)
{
_text = formattedText;
GridContent.Child = _text;
}
使用:
private void Border_Clicked(object sender, MouseButtonEventArgs e)
{
Border senderBox = (Border)sender;
TextBlock senderText = (TextBlock)senderBox.Child;
Bold inline = (Bold) senderText.Inlines.ElementAt(0);
var customMsgBox = new CustomMessageBox(inline);
customMsgBox.ShowModal();
}
现在,如果您不确定它是否始终为粗体对象,我建议您将格式化文本保存在 XML 中,然后再加载它。看看这个:showing formatted text
@Helen,有一种方法可以使用 TextRange 从 TextPointer 获取文本。试试这个代码
void myBorder_MouseDown(object sender, MouseButtonEventArgs e)
{
var senderBox = (Border)sender;
var senderText = (TextBlock)senderBox.Child;
var inline = (Bold)senderText.Inlines.ElementAt(0);
var textRange = new TextRange(inline.ContentStart, inline.ContentEnd);
Console.WriteLine(textRange.Text);
}
是从 Bold
元素中获取文本的问题吗?
private void Border_Clicked(object sender, MouseButtonEventArgs e)
{
var border = (Border)sender;
var textBlock = (TextBlock)border.Child;
var bold = (Bold)textBlock.Inlines.ElementAt(0);
// How to Output "Hello "?
// try
var output = ((Run)bold).Text;
// or rather (because Bold is a wrapper)
var output = ((Run)bold.Inlines[0]).Text;
}
如果你可以像这样添加内联
myText.Inlines.Add(new Run("Bold text") { FontWeight = FontWeight.Bold });
那就是
var run = (Run)textBlock.Inlines[0];
var output = run.Text;
我正在向 StackPanel
中的 Border
个元素添加一些 TextBlock
个元素。
我通过添加 Inlines
.
TextBlock
的文本并对其进行格式化
单击时,我想获取 TextBlock
的格式化文本。这是我的代码。
public void addText()
{
TextBlock myText = new TextBlock();
myText.Inlines.Add(new Bold(new Run("Hello ")));
myText.Inlines.Add("World!");
Border myBorder = new Border();
myBorder.Child = myText;
myBorder.MouseDown += new MouseButtonEventHandler(Border_Clicked);
myStackPanel.Children.Add(myBorder);
}
private void Border_Clicked(object sender, MouseButtonEventArgs e)
{
//Border senderBox = (Border)sender;
//TextBlock senderText = (TextBlock)senderBox.Child;
//Bold inline = (Bold) senderText.Inlines.ElementAt(0);
// How to Output "Hello "?
}
Border_Clicked
应该输出 "Hello "。如您所见,我可以访问粗体文本,但如何输出它?
无法控制 MessageBox 中的字体特征。我认为你应该考虑创建一个"custom MessageBox"。像这样:
<Window x:Class="WpfApplication1.CustomMessageBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
SizeToContent="WidthAndHeight" MaxWidth="400">
<Grid x:Name="GridContent" Margin="10">
</Grid>
</Window>
所以在它的构造函数中你可以发送你的粗体:
private Bold _text;
public CustomMessageBox(Bold formattedText)
{
_text = formattedText;
GridContent.Child = _text;
}
使用:
private void Border_Clicked(object sender, MouseButtonEventArgs e)
{
Border senderBox = (Border)sender;
TextBlock senderText = (TextBlock)senderBox.Child;
Bold inline = (Bold) senderText.Inlines.ElementAt(0);
var customMsgBox = new CustomMessageBox(inline);
customMsgBox.ShowModal();
}
现在,如果您不确定它是否始终为粗体对象,我建议您将格式化文本保存在 XML 中,然后再加载它。看看这个:showing formatted text
@Helen,有一种方法可以使用 TextRange 从 TextPointer 获取文本。试试这个代码
void myBorder_MouseDown(object sender, MouseButtonEventArgs e)
{
var senderBox = (Border)sender;
var senderText = (TextBlock)senderBox.Child;
var inline = (Bold)senderText.Inlines.ElementAt(0);
var textRange = new TextRange(inline.ContentStart, inline.ContentEnd);
Console.WriteLine(textRange.Text);
}
是从 Bold
元素中获取文本的问题吗?
private void Border_Clicked(object sender, MouseButtonEventArgs e)
{
var border = (Border)sender;
var textBlock = (TextBlock)border.Child;
var bold = (Bold)textBlock.Inlines.ElementAt(0);
// How to Output "Hello "?
// try
var output = ((Run)bold).Text;
// or rather (because Bold is a wrapper)
var output = ((Run)bold.Inlines[0]).Text;
}
如果你可以像这样添加内联
myText.Inlines.Add(new Run("Bold text") { FontWeight = FontWeight.Bold });
那就是
var run = (Run)textBlock.Inlines[0];
var output = run.Text;