Le novità del .NET Framework 3.5 SP1 in Windows Presentation Foundation

5 pagine in totale: [1] 2 3 4 5 Avanti >>

Il .NET Framework è in continua crescita e rispetto al suo rilascio, avvenuto nel 2001, è diventato uno strumento molto completo che ha inglobato moltissimi strumenti. Diversamente da quanto si è abituati, il Service Pack 1 da poco rilasciato introduce nuove caratteristiche oltre alle normali correzioni di bug e incrementi di prestazioni. Di seguito quindi una lista delle principali novità presenti nel Service Pack.

SplashScreen di attesa per le applicazioni

Quando l'avvio di un'applicazione richiede molto tempo, per notificare all'utente l'operazione di avvio e intrattenerlo nell'attesa, è solito mostrare un cosiddetto SplashScreen. Sebbene questa caratteristica è da sempre possibile crearla tramite una Window che viene mostrata in primo piano e poi chiusa al termine del caricamento della Window principale, ora è possibile inserire una qualsiasi immagine e automatizzare tale operazione. Per farlo occorre inserire nel progetto di Visual Studio una qualsiasi immagine e nelle proprietà di essa, specificare come Build Action la voce SplashScreen. Questa impostazione indica al compilatore di generare del codice, prima dell'avvio dell'applicazione, che istanzia la nuova classe SplashScreen del namespace System.Windows indicando il nome dell'immagine, determinando così la visualizzazione dell'immagine e la chiusura automatica di essa, con effetto dissolvenza, a caricamento dell'applicazione compiuto. Di seguito il codice che viene auto generato, ma che è possibile utilizzare anche in modo diverso:

SplashScreen splashScreen = new SplashScreen("splashscreen.png"); 
splashScreen.Show(true); 
WPF35SP1.App app = new WPF35SP1.App(); 
app.InitializeComponent(); 
app.Run();

La differenza sostanziale dall'usare una normale Window risiede nel fatto che in SplashScreen vengono invocate le API di Win32 minime per creare una finestra e mostrare l'immagine, senza chiamare in causa tutta l'inizializzazione del motore di WPF e di caricamento del markup, così da mostrare il prima possibile l'immagine.

Formattazione del Binding e dei contenuti

Nelle applicazioni WPF è frequente l'uso di un dato proveniente da qualsiasi sorgente per essere mostrato tramite Binding e il suo valore è solitamente un tipo primitivo ottenuto tramite una proprietà del Source o del DataContext. Spesso però questo valore dev'essere formattato costringendo il programmatore alla creazione di un Converter. Poiché in molti casi è sufficiente la normale formattazione di String.Format è disponibile una nuova proprietà StringFormat sulla classe BindingBase che permette di eseguire questa operazione senza ricorrere ai converter. Tramite essa è possibile formattare qualsiasi valore che implementi IFormattable (come le date e i tipi primitivi). Ecco un esempio applicato a Binding e MultiBinding.

<!-- Semplice formattazione sul Binding --> 
<TextBlock Text="{Binding Source={x:Static s:DateTime.Now},StringFormat=f}" /> 
 
<TextBlock> 
    <!-- Contesto dati fittizio --> 
    <TextBlock.DataContext> 
        <c:Customer FirstName="Cristian" LastName="Civera" /> 
    </TextBlock.DataContext> 
     
    <TextBlock.Text> 
        <!-- Formattazione applicata a più Binding --> 
        <MultiBinding StringFormat="Nome: {0} - Cognome: {1}"> 
            <Binding Path="FirstName" /> 
            <Binding Path="LastName" /> 
        </MultiBinding> 
    </TextBlock.Text> 
</TextBlock> 

In WPF sono inoltre presenti elementi che permettono di impostarne qualsiasi contenuto al quale viene applicato un template a seconda della tipologia, se specificato, o assegnato uno predefinito che effettua semplicemente il ToString dell'oggetto. Poiché questi template predefiniti fanno uso dell'oggetto Binding, sono definiti sugli elementi ContentControl, ContentPresenter una nuova proprietà ContentStringFormat per specificare la formattazione da utilizzare. In modo analogo sulla classe HeaderedContentControl è presente la nuova proprietà HeaderStringFormat, mentre su ItemsControl e HierarchicalDataTemplate è disponibile ItemStringFormat per il template predefinito per gli item. Qualora però venga specificato un template sui contenuti, questa impostazione viene ignorata. Ecco quindi un esempio di utilizzo di queste nuove proprietà.

<!-- Formattazione applicata al contenuto --> 
<Button Content="{x:Static s:DateTime.Now}" 
        ContentStringFormat="f"></Button> 
<!-- Formattazione applicata all'intestazione --> 
<Menu> 
    <MenuItem Header="{x:Static s:DateTime.Now}" 
              HeaderStringFormat="g"> 
    </MenuItem> 
</Menu> 
<!-- Formattazione applicata ad ogni Item--> 
<ListBox ItemStringFormat="dd MMMM \d\e\l yyyy"> 
    <ListBox.ItemsSource> 
        <x:Array Type="{x:Type s:DateTime}"> 
            <x:StaticExtension Member="s:DateTime.Now" /> 
            <x:StaticExtension Member="s:DateTime.Today" /> 
        </x:Array> 
    </ListBox.ItemsSource> 
</ListBox> 

5 pagine in totale: [1] 2 3 4 5 Avanti >>

Contenuti dell'articolo

Commenti
Dai un voto a questo articolo, ci aiuterà a migliorare il nostro sito (1 è il voto minimo, 5 il massimo).

Per procedere al rating dell'articolo devi essere autenticato.

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.

TUTORIALS


IN EVIDENZA
MISC