L'interfaccia di Windows Phone è stata il battesimo di fuoco per Metro, il design language, che si compone di un linguaggio ed alcuni principi. Mentre i principi sono astratti e sono alla base di Metro, il linguaggio ne è la rappresentazione concreta.
Basandosi sull'astrazione dei principi, possiamo dare rappresentazioni differenti del medesimo controllo al fine di adattarsi al meglio alla UI della nostra applicazione e, perché no, essere anche creativi.
Il controllo DatePicker presente nel toolkit ha un aspetto alquanto semplice: la data è visualizzata in un Button e, di conseguenza, semplicemente racchiusa in un rettangolo colorato.
Questo tipo di UI è essenziale ed adatta al data-entry, ma possiamo modificarla, anche pesantemente, nel caso volessimo aggiungere un pizzico di creatività in più.
Come dicevamo, il controllo DatePicker è molto semplice: il Template è costituito da uno StackPanel, un ContentControl e un Button, utilizzato per visualizzare la data. Eccola riportata:
<ControlTemplate TargetType="toolkit:DatePicker">
<StackPanel>
<ContentControl ContentTemplate="{TemplateBinding HeaderTemplate}"
Content="{TemplateBinding Header}"
Foreground="{StaticResource PhoneSubtleBrush}"
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="12,0,12,-4"/>
<Button x:Name="DateTimeButton"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}"
Content="{TemplateBinding ValueString}"
Foreground="{TemplateBinding Foreground}"
FontFamily="{TemplateBinding FontFamily}"
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
Height="72"/>
</StackPanel>
</ControlTemplate>Prima di modificare in qualsiasi modo l'aspetto del DatePicker è importantissimo modificare il Binding della proprietà Content del Button, in questo modo, da:
<Button ... Content="{TemplateBinding ValueString}" />a
<Button ... Content="{TemplateBinding Value}" />In questo modo, il Button conterrà non più il valore in stringa della data, ma il DateTime vero e proprio.
A questo punto possiamo modificare il template del Button, a nostro piacimento:
<DataTemplate x:Key="myTimerDataTemplate">
<Grid d:DesignWidth="96" d:DesignHeight="96">
<TextBlock Text="{Binding Day}"
FontFamily="Segoe WP Black"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Margin="3,-36,0,0"
d:DataContext="{Binding Source={StaticResource SampleDataSource1}}"
FontSize="96"/>
<TextBlock Grid.Row="1" TextWrapping="Wrap"
Text="{Binding Month, Converter={StaticResource MonthToStringConverter}}"
d:LayoutOverrides="Width, Height"
HorizontalAlignment="Left"
FontFamily="{StaticResource PhoneFontFamilyLight}"
FontSize="{StaticResource PhoneFontSizeNormal}"
VerticalAlignment="Bottom"
Margin="6,0,0,6"
d:DataContext="{Binding Source={StaticResource SampleDataSource1}}"/>
</Grid>
</DataTemplate>Alcune parti del template sono stati omessi per brevità, di seguito potete trovare l'aspetto del nuovo e vecchio template messa a confronto, con il relativo risultato.

Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare zizmor per rendere più sicuri i workflow di GitHub
Usare il metodo nameof con un tipo generico in C# 14
Il nuovo persistent state in Blazor
Creare popup e menu nativi in HTML con la Popover API
Running workloads and operations with Azure Kubernetes Service
Usare Microsoft-Decision-1 di AI Foundry per ottenere risposte decisionali strutturate
Realizzare un accordion con gli elementi HTML details e summary
Costruire endpoint SSE in ASP.NET Core
GitHub Copilot CLI in ambienti offline
Cambiamenti in OpenAPI per la documentazione di ASP.NET
Lockfiles per le GitHub Actions
Importare repository da Bitbucket a GitHub Enterprise Cloud
I più letti di oggi
- Personalizare l'icona e le funzionalità di un sito web per iOS e IE
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Accedere a risorse e immagini in Windows Store app di Windows 8
- Effetto turnstile su tutte le pagine con il Windows Phone Toolkit
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Permettere il Drag-and-drop solo su zone predefinite con Silverlight 2.0
- Accedere a dati esposti con WebService con Silverlight 1.0
- Utilizzare dati in formato XML in XAML


