Установите TextBlock, чтобы он был полностью полужирным, когда DataBound в WPF

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

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


person robintw    schedule 03.02.2009    source источник


Ответы (3)


Мне что-то не хватает, или вам просто нужно установить для свойства FontWeight значение «Полужирный»?

<TextBlock FontWeight="Bold" Text="{Binding Foo}" />
person Matt Hamilton    schedule 03.02.2009
comment
Спасибо! Это работает. Однако то же самое не работает с FontWeight of Italic. Есть ли такой же простой способ набрать курсив? - person robintw; 03.02.2009
comment
Уверенный! Стиль шрифта. См. msdn.microsoft.com/en-us / library / - person Matt Hamilton; 03.02.2009

Вместо того, чтобы просто иметь TextBlock, попробуйте следующее:

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

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

person user60401    schedule 03.02.2009
comment
В то время как исходный вопрос задавал вопрос, как сделать весь блок полужирным, это полезно, если вы хотите, чтобы определенные части текста были полужирными - при условии, что элементы являются отдельными элементами, к которым вы можете привязать. - person phil_rawlings; 26.03.2017

Вы говорите, что данные поступают непосредственно из источника данных; можно ли разместить перед ним слой абстракции? Довольно часто создается представление для того, что вы показываете, и представление обменивается данными с данными. Самая распространенная реализация этой идеи - это модель View View-Model (MVVM). Прочтите об этом в Интернете.

У вас может быть свойство DisplayText, привязанное к текстовому полю, и это просто «геттер», который обертывает базовый текст. Он может определить, был ли текст уже обернут, а если нет, обернуть его.

Eg.

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

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

person DarkwingDuck    schedule 03.02.2009