WPF: DatePicker in sola lettura (IsReadOnly)

Ciao a tutti. In questo tutorial vedremo come impostare il DatePicker delle WPF in sola lettura. Innanzi tutto spieghiamo brevemente cosa sono le WPF.

Windows Presentation Foundation (o WPF), nome in codice Avalon, è una libreria di classi del Framework .NET proprietarie Microsoft (introdotta con la versione 3.0) per lo sviluppo dell'interfaccia grafica delle applicazioni in ambienti Windows.

L'innovazione principale di WPF è la rimozione di ogni legame con il modello di sviluppo tradizionale di Windows, introdotto con la versione 1.0 del sistema operativo. Tutti i controlli sono stati riscritti (non si appoggiano più a quelli della libreria “user”) e lo stesso meccanismo basato su scambio di messaggi, cuore del modello di programmazione di Windows, è stato abbandonato.

WPF è basato su un sistema di grafica vettoriale che si appoggia alle DirectX per sfruttare l'accelerazione hardware delle moderne schede grafiche. WPF può essere impiegato per realizzare applicativi eseguibili anche all'interno del browser Microsoft Internet Explorer o di altri browser avanzati, purché sia presente il Framework. Il linguaggio usato per la creazione di una interfaccia utente in WPF è l'XAML (eXtensible Application Markup Language), basato su XML.

(Fonte Wikipedia)

In questi giorni mi sono trovato ad affrontare il problema di come rendere in sola lettura (IsReadOnly) il DatePicker presente nelle WPFToolkit, consentendo in questo modo di scegliere la data soltanto con la finestra popup che compare premendo sull'icona del calendario.

All'inizio avevo pensato di mettere all'evento KeyDown della tastiera il codice:

e.Handled = false;

ma facendo diversi test mi sono accorto che non tutti i tasti venivano catturati dall'evento (per esempio spazio, enter, backspace non generano questo tipo di evento). Ho pensato quindi di creare un metodo più complesso per catturare tutti i tasti premuti. Ma prima di iniziare mi sono imbattuto in una soluzione molto più rapida ed efficiente (in quanto viene fatta direttamente nello XAML).

Per rendere il DatePicker in sola lettura basterà editare il template della textbox associata al datepicker e di settarla proprio in sola lettura. Vediamo come fare:

<Window x:Class="DatePicker.Main"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit"
Title="DatePicker" WindowStartupLocation="CenterScreen" Loaded="Window_Loaded">
<Window.Resources>
<!-- IMPOSTO IL TARGET DEL MIO STILE -->
<Style TargetType="{x:Type my:DatePickerTextBox}">

<!-- IMPOSTA IL TESTO DELLA TEXTBOX DELLA DATEPICKER -->
<Setter Property="Text" Value="Seleziona data..." />

<!-- RENDE LA TEXTBOX DELLA DATEPICKER READONLY -->
<Setter Property="IsReadOnly" Value="True"></Setter>
</Style>
</Window.Resources>
<Grid>
<my:DatePicker SelectedDateFormat="Long" />
</Grid>
</Window>

In questo modo se eseguirete il codice vi renderete conto che la textbox associata al datepicker sarà in sola lettura ed inoltre all'inizio verrà mostrata la scritta "Seleziona data..." al posto di "Show Calendar".

Con questo è tutto. Ci vediamo al prossimo tutorial!

 

Menu Principale

Google Analytics

Statistiche