在WPF中进行数据绑定时,将TextBlock设置为完全加粗

28

我有一个数据绑定的 TextBlock 控件(它被用在 DataTemplate 中作为 ListBox 中显示项的控件),我想把控件内所有文本都变成粗体。但是我在属性资源管理器中找不到设置整个文本为粗体的属性,而且我在网上找到的所有信息都是使用 <Bold> 标签来实现这个功能,但是由于数据直接来自数据源,所以我无法添加标签。

一定有办法可以做到这个 - 但是怎么做呢?由于我在 WPF 上很没有经验,所以我不知道该从哪里入手。

3个回答

78

我是否遗漏了一些东西,或者你只需要将 FontWeight 属性设置为 "Bold"?

<TextBlock FontWeight="Bold" Text="{Binding Foo}" />

谢谢!那个有效。但是,使用斜体字重量时同样的方法不起作用。有没有类似简单的方法来实现斜体? - robintw
6
当然可以!FontStyle。请参见http://msdn.microsoft.com/zh-cn/library/system.windows.controls.textblock.fontstyle.aspx。 - Matt Hamilton

2

不要只使用TextBlock,试试这个:

<TextBlock>
  <Bold>
    <Run />
  </Bold>
</TextBlock>

然后绑定到 Run.TextProperty。

虽然最初的问题是如何将整个块设置为粗体,但如果您想要文本的特定部分变为粗体-假设这些元素是可以绑定到单独项目的,则此方法非常有用。 - phil_rawlings

0

您说数据直接来自数据源;是否可以在它前面加上一层抽象层?通常会为您要显示的内容创建一个视图,并将该视图与数据进行通信。这个想法的最常见实现是模型-视图-视图模型(MVVM)。请在线上阅读相关资料。

您可能有一个“DisplayText”属性,它绑定到文本框,只是一个包装基础文本的“getter”。它可以检测文本是否已经包装在 <p> 标签中,如果没有,则包装。

例如:

public class TestView {
  private Test datasource;
  public TestView(Test source)
  { 
     this.datasource = source;
  }

   public string DisplayText {
     get {
       if (datasource.Text.Contains("<bold>")==false) {
           return "<bold>" + datasource.Text + "</bold>";
       }
       return datasource.Text;
     }
   }
}

然后,绑定到视图而不是直接绑定到对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接