2014-07-25 24 views
7

Voglio tutti i caratteri di un TextBlock per essere visualizzati in maiuscoloWPF/XAML: come rendere tutto il testo in maiuscolo in TextBlock?

<TextBlock Name="tbAbc" 
      FontSize="12" 
      TextAlignment="Center" 
      Text="Channel Name" 
      Foreground="{DynamicResource {x:Static r:RibbonSkinResources.RibbonGroupLabelFontColorBrushKey}}" /> 

Le corde sono prese attraverso Binding. Non voglio mettere le stringhe in maiuscolo nel dizionario stesso.

+0

vedere [C bandiera formato # stringa o modificatore parametro minuscolo] (http://stackoverflow.com/questions/1839649/c-sharp-string-format-flag-or-modifier-to-lowercase-param) – pushpraj

+0

Possibile duplicato di [WPF/XAML: come rendere tutto il testo maiuscolo/maiuscolo?] (http://stackoverflow.com/questions/1762485/wpf- xaml-how-to-make-all-text-maiuscolo-maiuscolo) –

risposta

10

implementare un convertitore personalizzato.

using System.Globalization; 
using System.Windows.Data; 
// ... 
public class StringToUpperConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (value != null && value is string) 
     { 
      return ((string)value).ToUpper(); 
     } 

     return value; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return null; 
    } 
} 

quindi includere che nel vostro XAML come una risorsa:

<local:StringToUpperConverter x:Key="StringToUpperConverter"/> 

e aggiungerlo alla vostra vincolante:

Converter={StaticResource StringToUpperConverter} 
2

Se non è un grosso problema che si potrebbe usare TextBox invece di TextBlock come questo:

<TextBox CharacterCasing="Upper" IsReadOnly="True" /> 
+0

@ user3876923 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – RazvanR

+0

Non è davvero una risposta accettabile anche se la domanda richiede TextBlock. –

+1

@StephenDrew Ero ** non ** chiedendogli di accettare la mia risposta, semplicemente facendogli sapere che dovrebbe accettarne una (quella che lo ha aiutato di più - questo è tutto su questo sito, giusto?). Secondo me, quello con il convertitore è una buona risposta. (il mio è solo un'alternativa). – RazvanR

1

Io uso un convertitore di carattere valore di involucro:

class CharacterCasingConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     var s = value as string; 
     if (s == null) 
      return value; 

     CharacterCasing casing; 
     if (!Enum.TryParse(parameter as string, out casing)) 
      casing = CharacterCasing.Upper; 

     switch (casing) 
     { 
      case CharacterCasing.Lower: 
       return s.ToLower(culture); 
      case CharacterCasing.Upper: 
       return s.ToUpper(culture); 
      default: 
       return s; 
     } 
    } 

    object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotSupportedException(); 
    } 
} 
15

Oppure utilizzare

Typography.Capitals="AllSmallCaps" 

nel vostro TextBlock definizione.

Vedi qui: MSDN - Typography.Capitals

EDIT:

Questo non funziona in Windows Phone 8.1 , solo in Windows 8.1 ...

+2

Questo non funziona, i capitali saranno grandi capitali e i caratteri minuscoli saranno piccoli capitali. – Wouter