2009-02-03 6 views
24

J'ai un contrôle TextBlock databound (qui est utilisé dans un DataTemplate pour afficher des éléments dans un ListBox) et je veux mettre tout le texte dans le contrôle en gras. Je n'arrive pas à trouver une propriété dans l'explorateur de propriétés pour mettre tout le texte en gras, et tout ce que je peux trouver en ligne est l'utilisation de la balise <Bold> dans le TextBlock, mais je ne peux pas mettre cela comme les données venant directement de la source de données.Définir TextBlock pour être entièrement en gras lorsque DataBound dans WPF

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

Répondre

69

Ai-je raté quelque chose, ou avez-vous juste besoin de définir la propriété FontWeight sur "Gras"?

<TextBlock FontWeight="Bold" Text="{Binding Foo}" /> 
+0

Merci! Ça marche. Cependant, la même chose ne fonctionne pas avec un FontWeight d'italique. Existe-t-il un moyen similaire de faire des italiques? – robintw

+6

Bien sûr! Le style de police. Voir http://msdn.microsoft.com/fr-fr/library/system.windows.controls.textblock.fontstyle.aspx –

0

Vous dites que les données proviennent directement de la source de données; est-il possible de placer une couche d'abstraction devant elle? Il est assez courant de créer une vue pour ce que vous affichez et de faire communiquer la vue avec les données. L'implémentation la plus courante de cette idée est Model View View-Model (MVVM). Avoir une lecture à ce sujet en ligne.

Vous pouvez avoir une propriété 'DisplayText' liée à la zone de texte, et il s'agit simplement d'un 'getter' qui enveloppe le texte sous-jacent. Il peut détecter si le texte est déjà enveloppé et, si non, l'envelopper.

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 à la vue au lieu de directement à l'objet.

2

Plutôt que d'avoir un TextBlock, essayez ceci:

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

Puis DataBind au Run.TextProperty à la place.

+1

quel est l'avantage? – nicolas

+0

Alors que la question d'origine vous demandait comment définir le bloc entier en gras, cela est utile si vous souhaitez que certaines parties du texte soient en gras - en supposant que les éléments sont des éléments distincts auxquels vous pouvez vous lier. –

Questions connexes