Comment obtenir du texte multiligne sur un bouton WPF en utilisant uniquement C #? J'ai vu des exemples d'utilisation de <LineBreak/>
en XAML, mais mes boutons sont créés complètement par programmation en C #. Le nombre et les libellés des boutons correspondent aux valeurs du modèle de domaine. Je ne pense donc pas pouvoir utiliser XAML pour le spécifier.
J'ai essayé l'approche naïve ci-dessous, mais cela ne fonctionne pas.
Button b = new Button();
b.Content = "Two\nLines";
ou
b.Content = "Two\r\nLines";
Dans les deux cas, tout ce que je vois est la première ligne ("Deux") du texte.
Il s'avère que le "\ n" fonctionne bien. Ma grille avait une taille fixe et il n'y a simplement aucune indication visuelle dans un bouton indiquant qu'il y a plus de texte disponible (par exemple, pas de "..." indiquant une coupure). Une fois que j'ai généreusement étendu la taille de ma grille, le texte du bouton est apparu sur deux lignes.
OU en XAML directement:
<Button>
<TextBlock>Two<LineBreak/>Lines</TextBlock>
</Button>
Je préfère cette façon:
<Button Width="100">
<TextBlock TextWrapping="Wrap">This is a fairly long button label</TextBlock>
</Button>
cela a fonctionné pour moi.
La réponse est très simple. Utilisez simplement 

pour introduire le saut de ligne, c'est-à-dire:
<Button Content="Row 1 Text 
 Row 2 Text"/>
Il existe plusieurs façons de le faire via XAML:
<Button> <TextBlock TextAlignment="Center">Line 1<LineBreak/>Line 2</TextBlock> </Button>
Cette méthode est simple mais il n’existe aucun moyen de contrôler facilement l’alignement du texte:
<Button Content="Line 1 
 Line 2"/>
Une fois que la taille des boutons est inférieure à celle de TextBlocks, le contenu sera simplement divisé en deux lignes ou plus
<Button> <TextBlock TextWrapping="Wrap" HorizontalAlignment="Center">Line 1 Line 2</TextBlock> </Button>
<Button> <StackPanel> <TextBlock Text="Line1" HorizontalAlignment="Center"/> <TextBlock Text="Line2" HorizontalAlignment="Center"/> </StackPanel> </Button>
<Button> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <TextBlock Text="Line1" HorizontalAlignment="Center"/> <TextBlock Text="Line2" HorizontalAlignment="Center"/> </Grid> </Button>
C’est comme cela que nous procédons ici, cela permet aussi un centrage facile
<Button Height="40" Width="75">
<StackPanel>
<TextBlock Text="Line1" HorizontalAlignment="Center"/>
<TextBlock Text="Line2" HorizontalAlignment="Center"/>
</StackPanel>
</Button>
Avez-vous essayé cela?
b.Content = new TextBlock {
Text = "Two\lLines",
TextWrapping = TextWrapping.Wrap };
Si cela ne fonctionne pas, vous pouvez alors ajouter un StackPanel en tant qu'enfant et y ajouter deux éléments TextBlock.
Que diriez-vous:
TextBlock textBlock = new TextBlock();
textBlock.Inlines.Add("Two");
textBlock.Inlines.Add(new LineBreak());
textBlock.Inlines.Add("Lines");
Button button = new Button();
button.Content = textBlock;
Si vous utilisez C # 3, vous pouvez rendre cela légèrement plus net:
Button button = new Button
{
Content = new TextBlock { Inlines = { "Two", new LineBreak(), "Lines" } }
};
<Button
Command="{Binding DeliveryDateCommand}"
x:Name="cntlbtnf5"
Background="White"
BorderBrush="#FFABADB3"
Grid.Column="4"
>
<Border BorderBrush="{x:Null}" Height="Auto">
<TextBlock Text="Ctrl + F5
Delivery BillDate"
TextWrapping="Wrap"
Width="110"
TextAlignment="Center"
Height="44"
/>
</Border>
</Button>
J'ai eu le même problème.
J'ai essayé:
- button.content = "Line1\nLine2" (n'a pas fonctionné, j'ai peut-être fait quelque chose de mal);
- remplace le texte du bouton par une nouvelle étiquette (ne permet pas d’aligner le texte au centre);
- remplace le texte du bouton par un bloc de texte (je pense que cela vous permet d’aligner le texte au centre mais ne l’enveloppe pas);
J'ai vu des réponses mentionnant l'utilisation de panneaux empilés ou de grilles.
J'ai vu des réponses disant de ne pas utiliser de Textbox .
Même si l'OP dit que le \n
fonctionne, je ne pense pas que ce soit la voie à suivre, à mon avis, vous ne faites que forcer brutalement le contrôle à faire ce que vous voulez et si à un moment quelconque vous devez changer le texte vous devrez vérifier si le texte est correctement mis en forme ou si le \n
doit être dans une autre position.
Ce que j’ai trouvé être la meilleure solution (pour moi) est de remplacer le contenu du bouton par une zone de texte (vous pouvez simplement glisser-déposer, nul besoin de jouer avec XAML) et définir les propriétés suivantes comme indiqué: IsReadOnly = true;
Focusable = false (facultatif);
Je pense que Focusable = false
empêche l'utilisateur de sélectionner le texte, même s'il ne peut pas l'éditer, je ne veux même pas qu'il le sélectionne (goût personnel).
Cela fera que la zone de texte se comporte comme une étiquette, mais présente l'avantage de vous permettre d'aligner le texte au centre.