28

我有一个数据绑定的 TextBlock 控件(在 DataTemplate 中使用它来显示 ListBox 中的项目),我想让控件中的所有文本都加粗。我似乎无法在属性资源管理器中找到一个属性来将整个文本设置为粗体,而我在网上只能找到<Bold>TextBlock 内标签的使用,但由于数据即将到来,我无法将其放入直接来自数据源。

必须有一种方法可以做到这一点 - 但是如何?我对 WPF 非常缺乏经验,所以我真的不知道去哪里找。

4

3 回答 3

78

我是否遗漏了什么,或者您只需将 FontWeight 属性设置为“Bold”?

<TextBlock FontWeight="Bold" Text="{Binding Foo}" />
于 2009-02-03T10:24:27.247 回答
2

而不是只有一个TextBlock,试试这个:

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

然后将数据绑定到 Run.TextProperty。

于 2009-02-03T10:20:17.037 回答
0

您说数据直接来自数据源;是否可以在它前面放置一个抽象层?为您正在显示的内容创建视图并让视图与数据通信是很常见的。这个想法最常见的实现是模型视图视图模型(MVVM)。在线阅读它。

您可能有一个绑定到文本框的“DisplayText”属性,它只是一个包装底层文本的“getter”。它可以检测文本是否已经被包裹,如果没有,则包裹它。

例如。

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;
     }
   }
}

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

于 2009-02-03T10:05:47.580 回答