Задайте TextBlock да бъде изцяло удебелен, когато DataBound в WPF

Имам обвързана с данни контрола TextBlock (която се използва в DataTemplate за показване на елементи в ListBox) и искам да направя целия текст в контролата удебелен. Изглежда не мога да намеря свойство в изследователя на свойствата, за да задам целия текст на удебелен шрифт и всичко, което мога да намеря онлайн, е използването на маркера <Bold> вътре в TextBlock, но не мога да го поставя, тъй като данните са идващи директно от източника на данни.

Трябва да има начин това да стане - но как? Аз съм много неопитен в WPF, така че наистина не знам къде да търся.


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


Отговори (3)


Пропускам ли нещо или просто трябва да зададете свойството FontWeight на "Bold"?

<TextBlock FontWeight="Bold" Text="{Binding Foo}" />
person Matt Hamilton    schedule 03.02.2009
comment
Благодаря! Това работи. Въпреки това, същото нещо не работи с FontWeight на Italic. Има ли подобен лесен начин да направите курсив? - person robintw; 03.02.2009
comment
Сигурно е! FontStyle. Вижте msdn.microsoft.com/en-us /библиотека/ - 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

Казвате, че данните идват директно от източника на данни; възможно ли е да поставите слой абстракция пред него? Доста обичайно е да създавате изглед за това, което показвате, и изгледът да комуникира с данните. Най-честата реализация на тази идея е моделът на изгледа на изгледа (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