Quando definiamo un controllo TextBox o TextBlock Silverlight nativamente permette di specificare i seguenti Font:
- Arial
- Comic Sans MS
- Courier New
- Georgia
- Lucida Sans Unicode
- Times New Roman
- Trebuchet MS
- Verdana
- Webdings
Se vogliamo utilizzare un font diverso dobbiamo “embeddare” il font nella nostra applicazione.
Per fare ciò basta aggiungere al nostro progetto Silverlight, tramite il menu Add->Existing Item di Visual Studio, il file del Font e poi impostare le proprietà del file nel seguente modo

Cioè impostando la proprietà Build Action in Resource e Copy to Output Dir in Copy Always.
Questo fa si che file del Font, in questo caso tahoma.ttf, venga inserito nel file xap dell’applicazione.
Per utilizzare ora il Font in un controllo testuale, ad esempio un TextBlock basta referenziare il file nel seguente modo
<TextBlock FontFamily=”tahomabd.ttf#Tahoma,sans-serif”
dove nell’attributo FontFamily la prima parte, prima del cancelletto #, indica il nome del file che abbiamo embeddato, mentre la seconda parte indica la dicitura del font e delle sue eventuali caratteristiche che vogliamo utilizzare.
Quanto sopra ci permette di specificare un Font per controllo testuale durante la progettazione dell’interfaccia. Se invece vogliamo modificare un Font a Run-Time oppure specificarlo da codice (sempre considerando un Font diverso da quelli che Silverlight offre nativamente) possiamo procedere in due modi.
Il primo metodo consiste nell’utilizzare un Font Embedded, quindi aggiungiamo come abbiamo fatto sopra il file del font nella nostra applicazione, e poi tramite il seguente codice
System.IO.Stream strm = this.GetType().Assembly.GetManifestResourceStream("NomeAssempbly.tahoma.ttf"); miaTextBlock.FontSource = new FontSource(strm); |
Possiamo specificare per la TextBlock miaTextBlock il font.
Il secondo metodo invece permette di utilizzare Font che non sono embeddati nell’applicazione, ma di caricare questi ultimi via HTTP. Utilizzando il seguente codice impostiamo il font del controllo miaTextBlock caricandolo direttamente dal sito che ospita l’applicazione.
public Page() { InitializeComponent(); WebClient fontWebClient = new WebClient(); fontWebClient.OpenReadCompleted += new OpenReadCompletedEventHandler(fontWebClient_OpenReadCompleted); fontWebClient.OpenReadAsync(new Uri("http://www.silverlight-blog.it/tahoma.ttf", UriKind.Absolute)); } void fontWebClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) { miaTextBlock.FontSource = new FontSource(e.Result); } |
