127 votes

Mise en forme du texte dans un TextBlock

Comment mettre en forme un texte à l'intérieur d'un fichier TextBlock dans mon application WPF ?

par exemple : J'aimerais que certains mots soient en gras, d'autres en italique et d'autres encore en différentes couleurs, comme dans l'exemple suivant :

enter image description here

La raison de ma question est ce problème réel :

lblcolorfrom.Content = "Colour From: " + colourChange.ElementAt(3).Value.ToUpper();

Je voudrais que la deuxième partie de la chaîne soit en gras, et je sais que je pourrais utiliser deux contrôles (Labels, TextBlocks, etc.), mais je préfère ne pas le faire, en raison de la grande quantité de contrôles déjà utilisés.

166voto

ChrisF Points 74295

Vous devez utiliser Inlines :

<TextBlock.Inlines>
    <Run FontWeight="Bold" FontSize="14" Text="This is WPF TextBlock Example. " />
    <Run FontStyle="Italic" Foreground="Red" Text="This is red text. " />
</TextBlock.Inlines>

Avec reliure :

<TextBlock.Inlines>
    <Run FontWeight="Bold" FontSize="14" Text="{Binding BoldText}" />
    <Run FontStyle="Italic" Foreground="Red" Text="{Binding ItalicText}" />
</TextBlock.Inlines>

Vous pouvez également lier les autres propriétés :

<TextBlock.Inlines>
    <Run FontWeight="{Binding Weight}"
         FontSize="{Binding Size}"
         Text="{Binding LineOne}" />
    <Run FontStyle="{Binding Style}"
         Foreground="Binding Colour}"
         Text="{Binding LineTwo}" />
</TextBlock.Inlines>

Il est possible de lier les convertisseurs si l'on utilise l'expression "bold" comme booléen (par exemple).

116voto

Ashley Davis Points 3016

Vous pouvez le faire en XAML assez facilement :

<TextBlock>
  Hello <Bold>my</Bold> faithful <Underline>computer</Underline>.<Italic>You rock!</Italic>
</TextBlock>

59voto

qqbenq Points 1801

Il existe plusieurs Inline qui peuvent vous aider, pour les options de formatage les plus simples, vous pouvez utiliser Bold , Italic y Underline :

<TextBlock>
    Sample text with <Bold>bold</Bold>, <Italic>italic</Italic> and <Underline>underlined</Underline> words.
</TextBlock>

enter image description here

Je pense qu'il est utile de noter que ces éléments ne sont en fait que des abréviations de Span avec diverses propriétés définies (par exemple : pour les éléments Bold , le FontWeight est fixée à FontWeights.Bold ).

Ce qui nous amène à notre prochaine option : le Span élément.

Vous pouvez obtenir les mêmes effets avec cet élément que ci-dessus, mais vous disposez d'encore plus de possibilités ; vous pouvez définir (entre autres) le paramètre Foreground ou le Background propriétés :

<TextBlock>
    Sample text with <Span FontWeight="Bold">bold</Span>, <Span FontStyle="Italic">italic</Span> and <Span TextDecorations="Underline">underlined</Span> words. <Span Foreground="Blue">Coloring</Span> <Span Foreground="Red">is</Span> <Span Background="Cyan">also</Span> <Span Foreground="Silver">possible</Span>.
</TextBlock>

enter image description here

En Span peut également contenir d'autres éléments comme celui-ci :

<TextBlock>
    <Span FontStyle="Italic">Italic <Span Background="Yellow">text</Span> with some <Span Foreground="Blue">coloring</Span>.</Span>
</TextBlock>

enter image description here

Il y a un autre élément, qui est assez similaire à Span Il s'agit de Run . Les Run ne peut pas contenir d'autres éléments en ligne, tandis que le Span mais vous pouvez facilement lier une variable à la fonction Run 's Text propriété :

<TextBlock>
    Username: <Run FontWeight="Bold" Text="{Binding UserName}"/>
</TextBlock>

enter image description here

Vous pouvez également effectuer l'ensemble du formatage à partir du code-behind si vous le souhaitez :

TextBlock tb = new TextBlock();
tb.Inlines.Add("Sample text with ");
tb.Inlines.Add(new Run("bold") { FontWeight = FontWeights.Bold });
tb.Inlines.Add(", ");
tb.Inlines.Add(new Run("italic ") { FontStyle = FontStyles.Italic });
tb.Inlines.Add("and ");
tb.Inlines.Add(new Run("underlined") { TextDecorations = TextDecorations.Underline });
tb.Inlines.Add("words.");

47voto

Wegged Points 1071

Consultez l'exemple de Charles Petzolds Bool Application = Code + balisage

//----------------------------------------------
// FormatTheText.cs (c) 2006 by Charles Petzold
//----------------------------------------------
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Documents;

namespace Petzold.FormatTheText
{
    class FormatTheText : Window
    {
        [STAThread]
        public static void Main()
        {
            Application app = new Application();
            app.Run(new FormatTheText());
        }
        public FormatTheText()
        {
            Title = "Format the Text";

            TextBlock txt = new TextBlock();
            txt.FontSize = 32; // 24 points
            txt.Inlines.Add("This is some ");
            txt.Inlines.Add(new Italic(new Run("italic")));
            txt.Inlines.Add(" text, and this is some ");
            txt.Inlines.Add(new Bold(new Run("bold")));
            txt.Inlines.Add(" text, and let's cap it off with some ");
            txt.Inlines.Add(new Bold(new Italic (new Run("bold italic"))));
            txt.Inlines.Add(" text.");
            txt.TextWrapping = TextWrapping.Wrap;

            Content = txt;
        }
    }
}

11voto

Giellez Points 106

Un bon site, avec de bonnes explications :

http://www.wpf-tutorial.com/basic-controls/the-textblock-control-inline-formatting/

L'auteur vous donne ici de bons exemples de ce que vous recherchez ! Dans l'ensemble, ce site est un excellent outil de recherche et il couvre un grand nombre d'options offertes par WPF.

Editer

Il existe différentes méthodes pour formater le texte. Pour un formatage de base (le plus facile à mon avis) :

    <TextBlock Margin="10" TextWrapping="Wrap">
                    TextBlock with <Bold>bold</Bold>, <Italic>italic</Italic> and <Underline>underlined</Underline> text.
    </TextBlock>

L'exemple 1 montre un formatage de base avec Gras Itallique et le texte souligné.

La méthode SPAN, qui permet de mettre du texte en surbrillance, est incluse dans la suite :

   <TextBlock Margin="10" TextWrapping="Wrap">
                    This <Span FontWeight="Bold">is</Span> a
                    <Span Background="Silver" Foreground="Maroon">TextBlock</Span>
                    with <Span TextDecorations="Underline">several</Span>
                    <Span FontStyle="Italic">Span</Span> elements,
                    <Span Foreground="Blue">
                            using a <Bold>variety</Bold> of <Italic>styles</Italic>
                    </Span>.
   </TextBlock>

L'exemple 2 montre la fonction span et les différentes possibilités qu'elle offre.

Pour une explication détaillée, consultez le site !

Exemples

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X