Установите TextBlock как полностью жирный, когда DataBound в WPF - PullRequest
26 голосов
/ 03 февраля 2009

У меня есть элемент управления TextBlock с привязкой к данным (который используется внутри DataTemplate для отображения элементов в ListBox), и я хочу сделать весь текст в элементе управления полужирным. Кажется, я не могу найти свойство в проводнике свойств, чтобы установить весь текст жирным шрифтом, и все, что я могу найти в Интернете, это использовать тег <Bold> внутри TextBlock, но я не могу вставить это как данные поступают непосредственно из источника данных.

Должен быть способ сделать это - но как? Я очень неопытен в WPF, поэтому не знаю, где искать.

Ответы [ 3 ]

72 голосов
/ 03 февраля 2009

Я что-то упустил или вам просто нужно установить для свойства FontWeight значение "Bold"?

<TextBlock FontWeight="Bold" Text="{Binding Foo}" />
2 голосов
/ 03 февраля 2009

Вместо того, чтобы просто иметь TextBlock, попробуйте это:

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

Затем вместо этого свяжите данные с Run.TextProperty.

0 голосов
/ 03 февраля 2009

Вы говорите, что данные поступают непосредственно из источника данных; Можно ли разместить слой абстракции перед ним? Весьма распространено создавать представление для того, что вы отображаете, и чтобы представление связывалось с данными. Наиболее распространенной реализацией этой идеи является Model View View-Model (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;
     }
   }
}

Затем привязывайте к представлению, а не непосредственно к объекту.

...