【问题标题】:TextBlock Text property still null after adding Inlines添加内联后 TextBlock Text 属性仍然为空
【发布时间】:2014-05-07 01:37:54
【问题描述】:

在一个非常简单的 WPF 应用程序中,我在 button1_click() 方法中有以下代码:

textBlock1.Inlines.Add(new Run("TextBlock is designed to be lightweight."));
canvas.Children.Add(textBlock1);
Debug.Print("textBlock1.Text: {0}", textBlock1.Text);

Debug.Print 语句不会为 Text 属性打印任何内容,但实际文本(即“TextBlock is designed...”)在画布上的 TextBlock 控件中可见。为什么Text 属性没有描述Inlines 的精确副本?

PS:没有使用数据绑定等。该项目非常简单,在 MainWindow 内的 Canvas 上有一个 TextBlock 和一个 Button,以及最小的 XAML;一切都在代码隐藏中处理。

【问题讨论】:

  • 我只能建议,当您手动添加 TextBlock.Inlines 时,更改不会反映在 TextBlock.Text 属性上。但是如果你尝试指定 TextBlock.Text 属性,TextBlock.Inlines 集合将被正确修改。
  • @stukselbax 谢谢。

标签: c# wpf textblock


【解决方案1】:

您可以直接设置TextblockText 属性。如果您有需要特殊格式的文本,例如每个单词的粗体、 斜体、下划线等,那么您就可以使用Inlines

如果您想调试实际的Text,您需要将Run 提取到一个单独的变量中并访问其Text 属性。

var run = new Run("TextBlock is designed to be lightweight");
Debug.Print(run.Text);

【讨论】:

  • 是的,直接设置Text 属性即可。我不知道 Run 反过来有 Text 属性,所以很高兴知道。那么我们可以说这个故事的寓意是只在特殊格式需要的情况下诉诸Inlines
  • @Sabuncu 是的,仅当您只想说第一个字符加粗,其余为普通文本时才使用它,然后您创建两个运行,其中一个具有粗体格式。
  • @Sabuncu 例如,我们使用 TextBlock.Inlines 来突出显示 TextBlock 中文本的子字符串(搜索查询)。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-12
  • 2014-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
相关资源
最近更新 更多