web-dev-qa-db-fra.com

Définissez TextBlock pour être entièrement audacieuse lorsque le tableau de données dans WPF

J'ai une commande de TextBlock de TheTrailound (qui est utilisée dans un fichier de données pour afficher des éléments dans une liste de liste) et je souhaite faire tout le texte dans le contrôle audacieux. Je ne peux pas sembler trouver une propriété dans l'explorateur de propriétés pour définir le texte entier en gras et tout ce que je peux trouver en ligne est l'utilisation de la <Bold> Tagez à l'intérieur du texte TextBlock, mais je ne peux pas dire que les données provenaient directement de la source de données.

Il doit y avoir un moyen de faire cela - mais comment? Je suis très inexpérimenté dans WPF donc je ne sais pas vraiment où regarder.

26
robintw

Est-ce que je manque quelque chose ou avez-vous juste besoin de définir la propriété de Fontweight sur "Bold"?

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

Plutôt que d'avoir une texture textuelle, essayez ceci:

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

Puis Databind à la place.textProperty à la place.

2
user60401

Vous dites que les données sont directement provenant de la DataSource; Est-il possible de placer une couche d'abstraction devant elle? C'est assez courant de créer une vue pour ce que vous affichez et que vous avez la vue communiquer avec les données. La mise en œuvre la plus courante de cette idée est le modèle de vue de modèle (MVVM). Entez-en une lecture en ligne.

Vous pourriez avoir une propriété 'displaytext' qui est liée à la zone de texte, et c'est simplement un "getter" qui enveloppe le texte sous-jacent. Il peut détecter si le texte est déjà emballé dans et sinon, enveloppez-le.

Par exemple.

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

Ensuite, liez-vous à la vue au lieu de directement à l'objet.

0
DarkwingDuck