Domanda

Come faccio ad avere testo su più righe su un pulsante WPF utilizzando solo C #? Ho visto esempi di utilizzo <LineBreak/> in XAML, ma i miei tasti sono creati completamente a livello di codice in C #. Il numero e le etichette sui pulsanti corrispondono ai valori nel modello di dominio, quindi non credo che posso usare XAML per specificare questo.

Ho provato l'approccio ingenuo di sotto, ma non funziona.

Button b = new Button();
b.Content = "Two\nLines";

o

b.Content = "Two\r\nLines";

In entrambi i casi, tutto quello che vedo è la prima linea ( "due") del testo.

È stato utile?

Soluzione 6

Si scopre che il "\ n" funziona bene. La mia griglia aveva una dimensione fissa, e semplicemente non c'è indicazione visiva in un pulsante che non c'è più il testo a disposizione (ad esempio, nessun "..." che indica un cut-off). Una volta ho abbondantemente ampliato le dimensioni della mia griglia, il testo del pulsante si presentò in due file.

Altri suggerimenti

O in XAML direttamente:

<Button>
   <TextBlock>Two<LineBreak/>Lines</TextBlock>  
</Button>

Io preferisco in questo modo:

<Button Width="100">
  <TextBlock TextWrapping="Wrap">This is a fairly long button label</TextBlock>
</Button>

ha funzionato per me.

La risposta è molto semplice. Basta usare &#xa; per introdurre la linea-break, cioè:.

<Button Content="Row 1 Text &#xa; Row 2 Text"/>

Ci sono diversi modi per farlo tramite XAML:

  1. Aggiungi un TextBlock con una linea-break:
<Button>     
    <TextBlock TextAlignment="Center">Line 1<LineBreak/>Line 2</TextBlock>
</Button>
  1. Aggiungere una linea-break nel testo:

Questo metodo è semplice, ma non c'è modo di controllare facilmente l'allineamento del testo:

    <Button Content="Line 1 &#xa; Line 2"/>
  1. Aggiungi un blocco di testo e avvolgere il testo

Una volta che la dimensione Buttons è più piccolo del TextBlocks taglia IT semplicemente dividere il contenuto in due o più linee automaticamente

<Button>
  <TextBlock TextWrapping="Wrap" HorizontalAlignment="Center">Line 1 Line 2</TextBlock>
</Button>
  1. Usa può uno StackPanel nella vostra Button, e aggiungere ogni riga come un testo Block:
<Button>
    <StackPanel>
        <TextBlock Text="Line1" HorizontalAlignment="Center"/>
        <TextBlock Text="Line2" HorizontalAlignment="Center"/>
    </StackPanel>
</Button>
  1. Utilizzare una griglia nel vostro 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>
  • sono sicuro che molti di più esistere, la lista è fondamentalmente in ordine dal più al meno preferito.

Questo è come lo facciamo qui consente una facile centratura e

<Button Height="40" Width="75">
    <StackPanel>
        <TextBlock Text="Line1" HorizontalAlignment="Center"/>
        <TextBlock Text="Line2" HorizontalAlignment="Center"/>
    </StackPanel>
</Button>

Hai provato questo?

b.Content = new TextBlock { 
    Text = "Two\lLines", 
    TextWrapping = TextWrapping.Wrap };

Se questo non funziona, allora si potrebbe provare ad aggiungere uno StackPanel come un bambino e l'aggiunta di due elementi TextBlock a questo.

Come su:

TextBlock textBlock = new TextBlock();
textBlock.Inlines.Add("Two");
textBlock.Inlines.Add(new LineBreak());
textBlock.Inlines.Add("Lines");
Button button = new Button();
button.Content = textBlock;

Se stai usando C # 3 si può fare che un po 'più ordinato:

Button button = new Button
{
    Content = new TextBlock { Inlines = { "Two", new LineBreak(), "Lines" } }
};

Ho avuto lo stesso problema.

ho provato:
- button.content = "Riga1 \ nLine2" (non ha funzionato, forse ho fatto qualcosa di sbagliato);
- sostituire il testo pulsante con una nuova etichetta (non consente di centrare allineare il testo);
- sostituire il testo del pulsante con un blocco di testo (credo che questo consente di centrare allineare il testo, ma non va a capo di esso);

Ho visto le risposte che citano l'uso di stackpanels o griglie.
Ho visto risposte non dire di usare un Casella di testo .

Anche se l'OP dice che il \n funziona, non credo che questa sia la strada da percorrere, a mio parere, si sta solo bruta costringendo il controllo per fare quello che vuoi e se in qualsiasi momento è necessario modificare il testo si dovrà andare a controllare se il testo è correttamente avvolto o se il \n deve essere in un'altra posizione.
Quello che ho trovato per essere il modo migliore per andare (per me) è quello di sostituire il contenuto pulsante con una casella di testo (si può semplicemente trascinare e rilasciare, non c'è bisogno di pasticciare con XAML) e impostare le seguenti proprietà come indicato: IsReadOnly = true;
Focusable = false (opzionale);
Credo che Focusable = false impedisce all'utente di selezione del testo, anche se lui non può modificarlo, non voglio lui per selezionare addirittura (gusto personale).

Questo renderà la casella di testo si comporta simile ad un'etichetta, ma con il vantaggio che permette di centrare allineare il testo.

Prova sottostante Codice:

<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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top