Ingegnerizzare il vostro business per massimizzarne il valore: 
realizziamo con voi e per voi soluzioni innovative per 
ottimizzare il vostro lavoro. 
sistemi informativi adatti alle esigenze del cliente, per ottimizzare e massimizzare il 
lavoro. Soluzioni attente alle ultime innovazioni tecnologiche e alla user experience 
dell’utente finale. 
siti dinamici ed applicativi web per il professionista, le aziende e la pubblica 
amministrazione, implementati con tecnologia JoshuaCMS© per una maggiore 
flessibilità e fruibilità della gestione dei contenuti del sito 
formazione e framework per aziende e professionisti che vogliono approfondire le 
proprie conoscenze e innovare i propri prodotti con le ultime realtà tecnologiche del 
mondo .Net
WPF – basics 
13° Workshop DotNet Marche
Agenda 
Da Windows Forms a WPF 
Il ruolo di XAML 
DependencyProperties e Data Binding
Da Windows Forms a WPF
Da Windows Forms a WPF 
Nuovi tipi di contenuti da presentare 
Necessità di nuovi strumenti di programmazione 
Dividere la parte “Grafica” dalla parte “Applicativa” dello 
sviluppo 
Unificare differenti tecnologie 
Applicare la conoscenza e acquisita grazie al Web anche a 
Windows Forms.
Da Windows Forms a WPF 
Cosa ha in comune WPF con Windows Forms ?? 
NIENTE !! 
Nuovo linguaggio di programmazione “Funzionale” allo 
sviluppo di grafica. (XAML) 
Nuovo modello ad oggetti per rappresentare la UI 
Nuovo propagazione degli eventi 
Nuovo modello di gestione dei comandi 
Nuovo modello di binding 
… etc etc… 
Sfrutta le caratteristiche della scheda grafica 
(Direct X)
WPF – eXtensible Application Markup Language 
Linguaggio dichiarativo funzionale allo sviluppo della 
interfaccia utente 
Posso : 
Dichiarare oggetti e creare oggetti 
Sottoscrivere eventi 
Impostare Proprietà 
Manipolare Dati 
Invocare Metodi 
… 
Tutto quello che posso fare in XAML lo posso fare in C#
WPF – eXtensible Application Markup Language 
Creare Grafica Vettoriale 2D 
Creare Grafica Vettoriale 3D 
Dichiarare camere, luci, primitive, textures, etc…. 
Creare Animazioni 2D ed Animazioni 3D 
Utilizzare Stili e Templates per dichiarare la grafica degli 
oggetti.
XAML in pratica
XAML vs Code 
<Button Height="23" 
HorizontalAlignment="Left" 
Margin="52,63,0,0" 
Name="button1" 
VerticalAlignment="Top" 
Width="75">Ok</Button> 
Instanzia un 
oggetto di tipo 
“Button” 
Assegna valori 
alle proprietà 
dell’oggetto 
Inserisce il “Contenuto” 
dell’oggetto
Namespace 
Come fa il parser XAML a “trovare” le classi 
corrispondenti agli oggetti da instanziare ? 
Attraverso un mapping dei namespace 
Nella dichiarazione dell’oggetto, oppure 
Nella dichiarazione del root object 
I namespaces di default sono: 
http://schemas.microsoft.com/winfx/2006/xaml/presentation 
http://schemas.microsoft.com/winfx/2006/xaml
La proprietà content 
<Button Height="23“ Margin="52,63,0,0“ 
Name="button1" Width="75“> 
<Button.Content> 
<MediaElement 
Margin="0,0,0,0“ 
Name="mediaElement1“ 
Height="50" 
Width="50“ 
Source=“c:myvideo.avi” /> 
</Button.Content> 
</Button> 
Content è di 
tipo 
System.Object
Type Converters 
I Type converters sono classi che aiutano la conversione 
di valori di proprietà nel tipo appropriato 
Es: 
<Button Margin="52,63,0,0“ /> 
L’oggetto Button nella sua proprietà “Margin” accetta 
un oggetto di tipo Thickness. 
In xaml scriviamo una serie di valori numerici in 
formato di stringa.
Type Converters 
Il parser Xaml si occupa di cercare un convertitore appropriato 
per ogni tipo. 
L’attributo TypeConverterAttribute permette di indicare il 
convertitore custom per un tipo custom 
Per trovare il convertitore di un tipo di oggetto devo utilizzare 
il metodo GetConverter della classe TypeDescriptor 
Tutti i convertitori ereditano ed estendono TypeConverter
Markup Extensions 
Sono strutture che estendono le potenzialità di xaml 
Ogni markup extension deriva dalla classe 
MarkupExtension 
Possiamo ereditare la classe MarkupExtension per 
creare nostre estenzioni 
Il parser xaml considera markup extension tutti i valori 
di proprietà che sono racchiusi in { } 
Molto utilizzato per il binding. 
Es: 
<Button Background=“{x:Null}”/>
DataBinding in pratica….
WPF basics

WPF basics

  • 2.
    Ingegnerizzare il vostrobusiness per massimizzarne il valore: realizziamo con voi e per voi soluzioni innovative per ottimizzare il vostro lavoro. sistemi informativi adatti alle esigenze del cliente, per ottimizzare e massimizzare il lavoro. Soluzioni attente alle ultime innovazioni tecnologiche e alla user experience dell’utente finale. siti dinamici ed applicativi web per il professionista, le aziende e la pubblica amministrazione, implementati con tecnologia JoshuaCMS© per una maggiore flessibilità e fruibilità della gestione dei contenuti del sito formazione e framework per aziende e professionisti che vogliono approfondire le proprie conoscenze e innovare i propri prodotti con le ultime realtà tecnologiche del mondo .Net
  • 3.
    WPF – basics 13° Workshop DotNet Marche
  • 4.
    Agenda Da WindowsForms a WPF Il ruolo di XAML DependencyProperties e Data Binding
  • 5.
  • 6.
    Da Windows Formsa WPF Nuovi tipi di contenuti da presentare Necessità di nuovi strumenti di programmazione Dividere la parte “Grafica” dalla parte “Applicativa” dello sviluppo Unificare differenti tecnologie Applicare la conoscenza e acquisita grazie al Web anche a Windows Forms.
  • 7.
    Da Windows Formsa WPF Cosa ha in comune WPF con Windows Forms ?? NIENTE !! Nuovo linguaggio di programmazione “Funzionale” allo sviluppo di grafica. (XAML) Nuovo modello ad oggetti per rappresentare la UI Nuovo propagazione degli eventi Nuovo modello di gestione dei comandi Nuovo modello di binding … etc etc… Sfrutta le caratteristiche della scheda grafica (Direct X)
  • 8.
    WPF – eXtensibleApplication Markup Language Linguaggio dichiarativo funzionale allo sviluppo della interfaccia utente Posso : Dichiarare oggetti e creare oggetti Sottoscrivere eventi Impostare Proprietà Manipolare Dati Invocare Metodi … Tutto quello che posso fare in XAML lo posso fare in C#
  • 9.
    WPF – eXtensibleApplication Markup Language Creare Grafica Vettoriale 2D Creare Grafica Vettoriale 3D Dichiarare camere, luci, primitive, textures, etc…. Creare Animazioni 2D ed Animazioni 3D Utilizzare Stili e Templates per dichiarare la grafica degli oggetti.
  • 10.
  • 11.
    XAML vs Code <Button Height="23" HorizontalAlignment="Left" Margin="52,63,0,0" Name="button1" VerticalAlignment="Top" Width="75">Ok</Button> Instanzia un oggetto di tipo “Button” Assegna valori alle proprietà dell’oggetto Inserisce il “Contenuto” dell’oggetto
  • 12.
    Namespace Come fail parser XAML a “trovare” le classi corrispondenti agli oggetti da instanziare ? Attraverso un mapping dei namespace Nella dichiarazione dell’oggetto, oppure Nella dichiarazione del root object I namespaces di default sono: http://schemas.microsoft.com/winfx/2006/xaml/presentation http://schemas.microsoft.com/winfx/2006/xaml
  • 13.
    La proprietà content <Button Height="23“ Margin="52,63,0,0“ Name="button1" Width="75“> <Button.Content> <MediaElement Margin="0,0,0,0“ Name="mediaElement1“ Height="50" Width="50“ Source=“c:myvideo.avi” /> </Button.Content> </Button> Content è di tipo System.Object
  • 14.
    Type Converters IType converters sono classi che aiutano la conversione di valori di proprietà nel tipo appropriato Es: <Button Margin="52,63,0,0“ /> L’oggetto Button nella sua proprietà “Margin” accetta un oggetto di tipo Thickness. In xaml scriviamo una serie di valori numerici in formato di stringa.
  • 15.
    Type Converters Ilparser Xaml si occupa di cercare un convertitore appropriato per ogni tipo. L’attributo TypeConverterAttribute permette di indicare il convertitore custom per un tipo custom Per trovare il convertitore di un tipo di oggetto devo utilizzare il metodo GetConverter della classe TypeDescriptor Tutti i convertitori ereditano ed estendono TypeConverter
  • 16.
    Markup Extensions Sonostrutture che estendono le potenzialità di xaml Ogni markup extension deriva dalla classe MarkupExtension Possiamo ereditare la classe MarkupExtension per creare nostre estenzioni Il parser xaml considera markup extension tutti i valori di proprietà che sono racchiusi in { } Molto utilizzato per il binding. Es: <Button Background=“{x:Null}”/>
  • 17.