Condividi tramite


Riepilogo del capitolo 3. Dettagli della gestione del testo

Nota

Questo libro è stato pubblicato nella primavera del 2016, e non è stato aggiornato da allora. C'è molto nel libro che rimane prezioso, ma alcuni materiali sono obsoleti, e alcuni argomenti non sono più completamente corretti o completi.

Questo capitolo esplora la Label visualizzazione in modo più approfondito, tra cui colore, tipi di carattere e formattazione.

Ritorno a capo dei paragrafi

Quando la Text proprietà di Label contiene testo lungo, Label lo esegue automaticamente a capo in più righe, come illustrato dall'esempio baskervilles . È possibile incorporare codici Unicode come '\u2014' per i caratteri em-dash o C# come '\r' per interrompere una nuova riga.

Quando le HorizontalOptions proprietà e VerticalOptions di un Label oggetto sono impostate su LayoutOptions.Fill, le dimensioni complessive di Label sono regolate dallo spazio reso disponibile dal contenitore. Si Label dice che sia vincolato. La dimensione di Label è la dimensione del relativo contenitore.

Quando le HorizontalOptions proprietà e VerticalOptions sono impostate su valori diversi da LayoutOptions.Fill, le dimensioni di Label sono regolate dallo spazio necessario per il rendering del testo, fino alle dimensioni che il contenitore rende disponibile per .Label Si Label dice che non sia vincolato e determina le proprie dimensioni.

(Nota: i termini vincolati e non vincolati potrebbero essere contro-intuitivi, perché una visualizzazione non vincolata è in genere più piccola di una visualizzazione vincolata. Inoltre, questi termini non vengono usati in modo coerente nei primi capitoli del libro.

Una vista, ad esempio , Label può essere vincolata in una dimensione e non vincolata nell'altra. Un Label oggetto eseguirà il wrapping del testo solo su più righe se è vincolato orizzontalmente.

Se un Label oggetto è vincolato, potrebbe occupare molto più spazio del necessario per il testo. Il testo può essere posizionato all'interno dell'area complessiva di Label. Impostare la HorizontalTextAlignment proprietà su un membro dell'enumerazione TextAlignment (Start, Centero End) per controllare l'allineamento di tutte le righe del paragrafo. Il valore predefinito è Start e allinea a sinistra il testo.

Impostare la VerticalTextAlignment proprietà su un membro dell'enumerazione TextAlignment per posizionare il testo nella parte superiore, centrale o inferiore dell'area occupata da Label.

Impostare la LineBreakMode proprietà su un membro dell'enumerazione LineBreakMode (WordWrap, CharacterWrap, NoWrap, MiddleTruncationHeadTruncation, o TailTruncation) per controllare la modalità di troncamento delle più righe in un'interruzione di paragrafo.

Colori di testo e sfondo

Impostare le TextColor proprietà e BackgroundColor di Label su Color valori per controllare il colore del testo e dello sfondo.

Si BackgroundColor applica allo sfondo dell'intera area occupata da Label. A seconda delle HorizontalOptions proprietà e VerticalOptions , tale dimensione potrebbe essere notevolmente superiore all'area necessaria per visualizzare il testo. È possibile usare il colore per sperimentare i vari valori di , , e VerticalTextAlignment per vedere come influiscono sulle dimensioni e sulla posizione dell'oggetto Labele le dimensioni e la posizione del testo all'interno di Label. HorizontalExeAlignmentVerticalOptionsHorizontalOptions

Struttura Color

La Color struttura consente di specificare i colori come valori Red-Green-Blue (RGB) o valori Hue-Saturation-Luminosity (HSL) o con un nome di colore. È disponibile anche un canale Alfa per indicare la trasparenza.

Usare un Color costruttore per specificare:

Gli argomenti sono double valori compresi tra 0 e 1.

È anche possibile usare diversi metodi statici per creare Color valori:

  • Color.FromRgb per i double valori RGB da 0 a 1
  • Color.FromRgb per i valori RGB interi da 0 a 255
  • Color.FromRgba per i double valori RGB con trasparenza
  • Color.FromRgba per valori RGB interi con trasparenza
  • Color.FromHsla per double i valori HSL con trasparenza
  • Color.FromUint per un uint valore calcolato come (B + 256 * (G + 256 * (R + 256 * A)))
  • Color.FromHex per un string formato di cifre esadecimali nel formato "#AARRGGBB" o "#RRGGBB" o "#ARGB" o "#RGB", dove ogni lettera corrisponde a una cifra esadecimale per i canali alfa, rosso, verde e blu. Questo metodo viene usato come principale per le conversioni di colori XAML, come illustrato nel capitolo 7, nel codice XAML e nel codice.

Una volta creato, un Color valore non è modificabile. Le caratteristiche del colore possono essere ottenute dalle proprietà seguenti:

Si tratta di tutti i double valori compresi tra 0 e 1.

Color definisce anche 240 campi di sola lettura statici pubblici per i colori comuni. Al momento della scrittura del libro, erano disponibili solo 17 colori comuni.

Un altro campo di sola lettura statico pubblico definisce un colore con tutti i canali di colore impostati su zero:

Diversi metodi di istanza consentono di modificare un colore esistente per creare un nuovo colore:

Infine, due proprietà statiche di sola lettura definiscono un valore di colore speciale:

Color.Default è progettato per applicare la combinazione di colori della piattaforma e di conseguenza ha un significato diverso in contesti diversi su piattaforme diverse. Per impostazione predefinita, le combinazioni di colori della piattaforma sono:

  • iOS: testo scuro su uno sfondo chiaro
  • Android: testo chiaro su uno sfondo scuro (nel libro) o testo scuro su uno sfondo chiaro (per Material Design tramite AppCompat nel ramo principale del repository di codice di esempio)
  • UWP: testo scuro su uno sfondo chiaro

Il Color.Accent valore restituisce un colore specifico della piattaforma (e talvolta selezionabile dall'utente) visibile su uno sfondo scuro o chiaro.

Modifica della combinazione di colori dell'applicazione

Le varie piattaforme hanno una combinazione di colori predefinita, come illustrato nell'elenco precedente.

Quando la destinazione è Android, è possibile passare a uno schema chiaro scuro specificando un tema chiaro nel file Android.Manifest.xml.

Per le piattaforme Windows, il tema colori viene normalmente selezionato dall'utente, ma puoi aggiungere un RequestedTheme attributo impostato su Light o Dark nel file App.xaml della piattaforma. Per impostazione predefinita, il file App.xaml nel progetto UWP contiene un RequestedTheme attributo impostato su Light.

Dimensioni e attributi dei tipi di carattere

Impostare la FontFamily proprietà di Label su una stringa, ad esempio "Times Roman" per selezionare una famiglia di caratteri. Tuttavia, è necessario specificare una famiglia di caratteri supportata nella piattaforma specifica e le piattaforme non sono coerenti in questo senso.

Impostare la FontSize proprietà di Label su per double specificare l'altezza approssimativa del tipo di carattere. Per altre informazioni sulla scelta intelligente delle dimensioni dei caratteri, vedere Capitolo 5, Gestione delle dimensioni.

In alternativa, è possibile ottenere una delle diverse dimensioni predefinite dei tipi di carattere dipendenti dalla piattaforma. Il metodo statico Device.GetNamedSize e l'overload restituiscono entrambi un double valore di dimensione del carattere appropriato per la piattaforma in base ai membri dell'enumerazione NamedSize (Default, Micro, SmallMedium, e Large). Il valore restituito dal Medium membro non è necessariamente uguale Defaulta . L'esempio NamedFontSizes visualizza il testo con queste dimensioni denominate.

Impostare la FontAttributes proprietà di Label su un membro di questa FontAttributes enumerazione, Bold, Italico None. È possibile combinare i Bold membri e Italic con l'operatore OR bit per bit C#.

Testo formattato

In tutti gli esempi finora, l'intero testo visualizzato da Label è stato formattato in modo uniforme. Per variare la formattazione all'interno di una stringa di testo, non impostare la Text proprietà di Label. Impostare invece la FormattedText proprietà su un oggetto di tipo FormattedString.

FormattedString dispone di una Spans proprietà che è una raccolta di Span oggetti . Ogni Span oggetto ha le proprie Textproprietà , FontFamily, FontAttributesFontSize, ForegroundColor, e BackgroundColor .

L'esempio VariableFormattedText illustra l'uso della FormattedText proprietà per una singola riga di testo e VariableFormattedParagraph illustra la tecnica per un intero paragrafo, come illustrato di seguito:

Screenshot triplo del paragrafo formattato della variabile

Il programma NamedFontSizes usa un singolo Label oggetto e un FormattedString oggetto per visualizzare tutte le dimensioni del carattere denominate per ogni piattaforma.