web-dev-qa-db-ja.com

WPFのDataBound時にTextBlockを完全に太字に設定します

データバインドされたTextBlockコントロール(DataTemplate内で使用され、ListBox内のアイテムを表示する)を持っているので、コントロール内のすべてのテキストを太字にします。プロパティエクスプローラーでテキスト全体を太字に設定するプロパティを見つけることができないようです。オンラインで見つけることができるのは、TextBlock内の<Bold>タグの使用だけですが、それを入れることはできません。データはデータソースから直接取得されるため。

これを行う方法があるはずです-しかし、どうやって?私はWPFに非常に慣れていないので、どこを見ればよいのか本当にわかりません。

26
robintw

何か不足していますか、それともFontWeightプロパティを「太字」に設定する必要があるだけですか?

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

TextBlockだけではなく、次のことを試してください。

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

次に、代わりにRun.TextPropertyにデータバインドします。

2
user60401

あなたはデータがデータソースから直接来ていると言います。その前に抽象化の層を配置することは可能ですか?表示しているもののビューを作成し、ビューがデータと通信することは非常に一般的です。このアイデアの最も一般的な実装は、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;
     }
   }
}

次に、オブジェクトに直接ではなく、ビューにバインドします。

0
DarkwingDuck