SlideShare a Scribd company logo
1 of 21
Thomas Claudius Huber | Trivadis AG
Alles was Sie über XAML wissen
müssen
Thomas Claudius Huber
 Principal Consultant @ Trivadis AG
 www.trivadis.com
 www.thomasclaudiushuber.com
 Trainer, Coach, Developer, Architect
 Spezialisiert auf WPF, XAML, WinApps
 Autor der umfassenden Handbücher
zu WPF, Silverlight und
Windows Store Apps
Sessioninhalt
 XAML Basics
 Elemente und Attribute
 Magie
 TypeConverter
 Markup Extensions
 …
XAML
 Steht für eXtensible Application Markup Language
 Eine XML-basierte Markup Sprache zum Instantiieren
von Objekten:
 Wurde sogar als Serialisierungsformat erstellt
 WPF nutzt XAML als UI-Beschreibungssprache
Warum XAML?
Workflow mit XAML
DesignerEntwickler
Visual Studio Blend
XAM L
Sessioninhalt
 XAML Basics
 Elemente und Attribute
 Magie
 TypeConverter
 Markup Extensions
 …
Properties setzen
 Attribut-Syntax
 Property-Element-Syntax
 Implicit as content of element
<Button Content="OK"/>
<Button>
<Button.Content>
OK
</Button.Content>
</Button>
<Button>
OK
</Button> Demo
Properties setzen
 Implizit als Inhalt des Elements
 Suche via ContentPropertyAttribute
 Attached-Property-Syntax
<Canvas Width="300" Height="200">
<TextBox Canvas.Left="50" Canvas.Top="20" Text="Welcome"/>
</Canvas>
<Button>
OK
</Button>
[ContentPropertyAttribute(„Content")]
public class ContentControl:Control{...}
Demo
Klassen-Lookup
 Elemente werden über XML-Namespace zugeordnet
 XML-Namespace wird auf Assembly-Ebene
mehreren CLR-Namespaces zugeordnet
 Zuordnung findet via XmlnsDefinitionAttribute statt
<Window x:Class="WpfApplication4.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" .../>
Demo
1:1-Namespace-Mapping
 Xmlns-Attribut mit Assembly
 CLR-Namespace und XAML in derselben Assembly:
 Objekte mit gewähltem Alias instantiieren
xmlns:alias ="clr-namespace:yourCLRNamespace;assembly=yourAssembly"
xmlns:alias ="clr-namespace:yourCLRNamespace"
<alias:YourClass/>
1:n-Namespace-Mapping
 XmlnsDefinitionAttribute auf Assembly nutzen
 XmlnsPrefix zum Vorschlagen eines Alias
 Ideal für Bibliotheken mit mehreren
CLR-Namespaces
Xmlns von XAML
 x-Alias
 Ist dem CLR-Namespace System.Windows.Markup
zugeordnet
 Enthält Compiler-Direktiven
 x:Class
 k:Key
 x:Code
 x:Name
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Sessioninhalt
 XAML Basics
 Elemente und Attribute
 Magie
 TypeConverter
 Markup Extensions
 …
TypeConverter
 Margin-Property in XAML setzen
 Margin-Property in C#
 XAML wandelt den String «10» in ein Thickness-
Objekt um
<Button Margin="10" Content="Book TVD-course"/>
Button btn = new Button();
btn.Margin = new Thickness(10);
btn.Content = "Book TVD-course";
TypeConverter
 Thickness-Struct hat TypeConverterAttribute
 XAML-Parser sucht nach diesem Attribut
 ThicknessConverter wird instanstiiert und
konvertiert String zu Thickness-Objekt
 Eigene TypeConverter von TypeConverter ableiten
[TypeConverterAttribute(typeof(ThicknessConverter))]
public struct Thickness:IEquatable<Thickness>{...}
Demo
Markup Extensions
 Klassem zum Erweitern von XAML:
 Binding, StaticResource, …
 Attribut-Syntax: mit geschweiften Klammern
 Alternativ zur Attribut-Syntax auch als Objektelement
<Slider x:Name="sli"/>
<Button Content="{Binding Path=Value, ElementName=sli}"/>
<Slider x:Name="sli"/>
<Button>
<Binding Path="Value" ElementName="sli"/>
</Button> Demo
XAML & Collections
 IList und IDictionary werden unterstützt
 Bei IList wird die Add-Methode aufgerufen
 Bei IDictionary wird das x:Key-Attribut genutzt
 XAML
 C#
<ResourceDictionary>
<SolidColorBrush x:Key="redBrush" Color="Red"/>
</ResourceDictionary>
ResourceDictionary dictionary = new ResourceDictionary();
SolidColorBrush brush = new SolidColorBrush();
brush.Color = Colors.Red;
dictionary.Add("redBrush", brush);
Demo
XAML dynamisch laden
 XAML ist ein Serialisierungsformat
 Lesen via XamlReader
 Schreiben via XamlWriter
Demo
Sessioninhalt
 XAML Basics
 Elemente und Attribute
 Magie
 TypeConverter
 Markup Extensions
 …
Danke
Twitter: @thomasclaudiush
Homepage: www.thomasclaudiushuber.com
Mail: thomas.huber@trivadis.com
Slides/Demos:
www.thomasclaudiushuber.com/blog

More Related Content

Similar to Alles was Sie über XAML wissen müssen

FMK2014: FileMaker Plugin erzeugen by Christian Schmitz
FMK2014: FileMaker Plugin erzeugen by Christian SchmitzFMK2014: FileMaker Plugin erzeugen by Christian Schmitz
FMK2014: FileMaker Plugin erzeugen by Christian SchmitzVerein FM Konferenz
 
Abläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisierenAbläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisierenChristian Münch
 
FMK2019 Nutzung von Shell-Skripts in FileMaker by Erich Schmidt
FMK2019 Nutzung von Shell-Skripts in FileMaker by Erich SchmidtFMK2019 Nutzung von Shell-Skripts in FileMaker by Erich Schmidt
FMK2019 Nutzung von Shell-Skripts in FileMaker by Erich SchmidtVerein FM Konferenz
 
Einführung XHTML CSS JS // MM 08-11
Einführung XHTML CSS JS // MM 08-11Einführung XHTML CSS JS // MM 08-11
Einführung XHTML CSS JS // MM 08-11Noël Bossart
 
FM2014: Einführung in Function Scripting by Thomas Hirt
FM2014: Einführung in Function Scripting by Thomas HirtFM2014: Einführung in Function Scripting by Thomas Hirt
FM2014: Einführung in Function Scripting by Thomas HirtVerein FM Konferenz
 
FMK2015: FrameWork Konzepte in FileMaker Pro by Wolfgang Wunderlich
FMK2015: FrameWork Konzepte in FileMaker Pro by Wolfgang WunderlichFMK2015: FrameWork Konzepte in FileMaker Pro by Wolfgang Wunderlich
FMK2015: FrameWork Konzepte in FileMaker Pro by Wolfgang WunderlichVerein FM Konferenz
 
JSF 2 Kompositkomponenten (JAX 2012)
JSF 2 Kompositkomponenten (JAX 2012)JSF 2 Kompositkomponenten (JAX 2012)
JSF 2 Kompositkomponenten (JAX 2012)Michael Kurz
 
FileMaker 13 - Neue Befehle und mehr Möglichkeiten by Patrick Risch
FileMaker 13 - Neue Befehle und mehr Möglichkeiten by Patrick RischFileMaker 13 - Neue Befehle und mehr Möglichkeiten by Patrick Risch
FileMaker 13 - Neue Befehle und mehr Möglichkeiten by Patrick RischVerein FM Konferenz
 
FMK2015: MBS FileMaker Plugin by Christian Schmitz
FMK2015: MBS FileMaker Plugin by Christian SchmitzFMK2015: MBS FileMaker Plugin by Christian Schmitz
FMK2015: MBS FileMaker Plugin by Christian SchmitzVerein FM Konferenz
 
Sitzung 2
Sitzung 2Sitzung 2
Sitzung 2scuy
 
Von 0 auf 100 - Performance im Web
Von 0 auf 100 - Performance im WebVon 0 auf 100 - Performance im Web
Von 0 auf 100 - Performance im WebSebastian Springer
 
Einführung in Blend
Einführung in BlendEinführung in Blend
Einführung in BlendJan Hentschel
 
Anforderungsanalyse und UML Grundlagen
Anforderungsanalyse und UML GrundlagenAnforderungsanalyse und UML Grundlagen
Anforderungsanalyse und UML GrundlagenChristian Baranowski
 
FMK2015: Von Skriptparametern Variablen und Globalen by Patrick Risch
FMK2015: Von Skriptparametern Variablen und Globalen by Patrick RischFMK2015: Von Skriptparametern Variablen und Globalen by Patrick Risch
FMK2015: Von Skriptparametern Variablen und Globalen by Patrick RischVerein FM Konferenz
 
XML-Socket-Server zur Kommunikation mit Flash
XML-Socket-Server zur Kommunikation mit FlashXML-Socket-Server zur Kommunikation mit Flash
XML-Socket-Server zur Kommunikation mit FlashStephan Schmidt
 
The Lotus Code Cookbook
The Lotus Code CookbookThe Lotus Code Cookbook
The Lotus Code CookbookUlrich Krause
 
AWS Initiate Berlin - Maschinelles Lernen - Chancen, Werkzeuge und Beispiel-A...
AWS Initiate Berlin - Maschinelles Lernen - Chancen, Werkzeuge und Beispiel-A...AWS Initiate Berlin - Maschinelles Lernen - Chancen, Werkzeuge und Beispiel-A...
AWS Initiate Berlin - Maschinelles Lernen - Chancen, Werkzeuge und Beispiel-A...Amazon Web Services
 

Similar to Alles was Sie über XAML wissen müssen (20)

FMK2014: FileMaker Plugin erzeugen by Christian Schmitz
FMK2014: FileMaker Plugin erzeugen by Christian SchmitzFMK2014: FileMaker Plugin erzeugen by Christian Schmitz
FMK2014: FileMaker Plugin erzeugen by Christian Schmitz
 
WCF Einführung
WCF EinführungWCF Einführung
WCF Einführung
 
Abläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisierenAbläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisieren
 
FMK2019 Nutzung von Shell-Skripts in FileMaker by Erich Schmidt
FMK2019 Nutzung von Shell-Skripts in FileMaker by Erich SchmidtFMK2019 Nutzung von Shell-Skripts in FileMaker by Erich Schmidt
FMK2019 Nutzung von Shell-Skripts in FileMaker by Erich Schmidt
 
Einführung XHTML CSS JS // MM 08-11
Einführung XHTML CSS JS // MM 08-11Einführung XHTML CSS JS // MM 08-11
Einführung XHTML CSS JS // MM 08-11
 
FM2014: Einführung in Function Scripting by Thomas Hirt
FM2014: Einführung in Function Scripting by Thomas HirtFM2014: Einführung in Function Scripting by Thomas Hirt
FM2014: Einführung in Function Scripting by Thomas Hirt
 
FMK2015: FrameWork Konzepte in FileMaker Pro by Wolfgang Wunderlich
FMK2015: FrameWork Konzepte in FileMaker Pro by Wolfgang WunderlichFMK2015: FrameWork Konzepte in FileMaker Pro by Wolfgang Wunderlich
FMK2015: FrameWork Konzepte in FileMaker Pro by Wolfgang Wunderlich
 
JSF 2 Kompositkomponenten (JAX 2012)
JSF 2 Kompositkomponenten (JAX 2012)JSF 2 Kompositkomponenten (JAX 2012)
JSF 2 Kompositkomponenten (JAX 2012)
 
FileMaker 13 - Neue Befehle und mehr Möglichkeiten by Patrick Risch
FileMaker 13 - Neue Befehle und mehr Möglichkeiten by Patrick RischFileMaker 13 - Neue Befehle und mehr Möglichkeiten by Patrick Risch
FileMaker 13 - Neue Befehle und mehr Möglichkeiten by Patrick Risch
 
FMK2015: MBS FileMaker Plugin by Christian Schmitz
FMK2015: MBS FileMaker Plugin by Christian SchmitzFMK2015: MBS FileMaker Plugin by Christian Schmitz
FMK2015: MBS FileMaker Plugin by Christian Schmitz
 
Sitzung 2
Sitzung 2Sitzung 2
Sitzung 2
 
Von 0 auf 100 - Performance im Web
Von 0 auf 100 - Performance im WebVon 0 auf 100 - Performance im Web
Von 0 auf 100 - Performance im Web
 
Einführung in Blend
Einführung in BlendEinführung in Blend
Einführung in Blend
 
Anforderungsanalyse und UML Grundlagen
Anforderungsanalyse und UML GrundlagenAnforderungsanalyse und UML Grundlagen
Anforderungsanalyse und UML Grundlagen
 
FMK2015: Von Skriptparametern Variablen und Globalen by Patrick Risch
FMK2015: Von Skriptparametern Variablen und Globalen by Patrick RischFMK2015: Von Skriptparametern Variablen und Globalen by Patrick Risch
FMK2015: Von Skriptparametern Variablen und Globalen by Patrick Risch
 
XML-Socket-Server zur Kommunikation mit Flash
XML-Socket-Server zur Kommunikation mit FlashXML-Socket-Server zur Kommunikation mit Flash
XML-Socket-Server zur Kommunikation mit Flash
 
The Lotus Code Cookbook
The Lotus Code CookbookThe Lotus Code Cookbook
The Lotus Code Cookbook
 
Ajax, Comet & Co.
Ajax, Comet & Co.Ajax, Comet & Co.
Ajax, Comet & Co.
 
Flex Skinning
Flex SkinningFlex Skinning
Flex Skinning
 
AWS Initiate Berlin - Maschinelles Lernen - Chancen, Werkzeuge und Beispiel-A...
AWS Initiate Berlin - Maschinelles Lernen - Chancen, Werkzeuge und Beispiel-A...AWS Initiate Berlin - Maschinelles Lernen - Chancen, Werkzeuge und Beispiel-A...
AWS Initiate Berlin - Maschinelles Lernen - Chancen, Werkzeuge und Beispiel-A...
 

Alles was Sie über XAML wissen müssen

  • 1. Thomas Claudius Huber | Trivadis AG Alles was Sie über XAML wissen müssen
  • 2. Thomas Claudius Huber  Principal Consultant @ Trivadis AG  www.trivadis.com  www.thomasclaudiushuber.com  Trainer, Coach, Developer, Architect  Spezialisiert auf WPF, XAML, WinApps  Autor der umfassenden Handbücher zu WPF, Silverlight und Windows Store Apps
  • 3. Sessioninhalt  XAML Basics  Elemente und Attribute  Magie  TypeConverter  Markup Extensions  …
  • 4. XAML  Steht für eXtensible Application Markup Language  Eine XML-basierte Markup Sprache zum Instantiieren von Objekten:  Wurde sogar als Serialisierungsformat erstellt  WPF nutzt XAML als UI-Beschreibungssprache
  • 7. Sessioninhalt  XAML Basics  Elemente und Attribute  Magie  TypeConverter  Markup Extensions  …
  • 8. Properties setzen  Attribut-Syntax  Property-Element-Syntax  Implicit as content of element <Button Content="OK"/> <Button> <Button.Content> OK </Button.Content> </Button> <Button> OK </Button> Demo
  • 9. Properties setzen  Implizit als Inhalt des Elements  Suche via ContentPropertyAttribute  Attached-Property-Syntax <Canvas Width="300" Height="200"> <TextBox Canvas.Left="50" Canvas.Top="20" Text="Welcome"/> </Canvas> <Button> OK </Button> [ContentPropertyAttribute(„Content")] public class ContentControl:Control{...} Demo
  • 10. Klassen-Lookup  Elemente werden über XML-Namespace zugeordnet  XML-Namespace wird auf Assembly-Ebene mehreren CLR-Namespaces zugeordnet  Zuordnung findet via XmlnsDefinitionAttribute statt <Window x:Class="WpfApplication4.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" .../> Demo
  • 11. 1:1-Namespace-Mapping  Xmlns-Attribut mit Assembly  CLR-Namespace und XAML in derselben Assembly:  Objekte mit gewähltem Alias instantiieren xmlns:alias ="clr-namespace:yourCLRNamespace;assembly=yourAssembly" xmlns:alias ="clr-namespace:yourCLRNamespace" <alias:YourClass/>
  • 12. 1:n-Namespace-Mapping  XmlnsDefinitionAttribute auf Assembly nutzen  XmlnsPrefix zum Vorschlagen eines Alias  Ideal für Bibliotheken mit mehreren CLR-Namespaces
  • 13. Xmlns von XAML  x-Alias  Ist dem CLR-Namespace System.Windows.Markup zugeordnet  Enthält Compiler-Direktiven  x:Class  k:Key  x:Code  x:Name xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  • 14. Sessioninhalt  XAML Basics  Elemente und Attribute  Magie  TypeConverter  Markup Extensions  …
  • 15. TypeConverter  Margin-Property in XAML setzen  Margin-Property in C#  XAML wandelt den String «10» in ein Thickness- Objekt um <Button Margin="10" Content="Book TVD-course"/> Button btn = new Button(); btn.Margin = new Thickness(10); btn.Content = "Book TVD-course";
  • 16. TypeConverter  Thickness-Struct hat TypeConverterAttribute  XAML-Parser sucht nach diesem Attribut  ThicknessConverter wird instanstiiert und konvertiert String zu Thickness-Objekt  Eigene TypeConverter von TypeConverter ableiten [TypeConverterAttribute(typeof(ThicknessConverter))] public struct Thickness:IEquatable<Thickness>{...} Demo
  • 17. Markup Extensions  Klassem zum Erweitern von XAML:  Binding, StaticResource, …  Attribut-Syntax: mit geschweiften Klammern  Alternativ zur Attribut-Syntax auch als Objektelement <Slider x:Name="sli"/> <Button Content="{Binding Path=Value, ElementName=sli}"/> <Slider x:Name="sli"/> <Button> <Binding Path="Value" ElementName="sli"/> </Button> Demo
  • 18. XAML & Collections  IList und IDictionary werden unterstützt  Bei IList wird die Add-Methode aufgerufen  Bei IDictionary wird das x:Key-Attribut genutzt  XAML  C# <ResourceDictionary> <SolidColorBrush x:Key="redBrush" Color="Red"/> </ResourceDictionary> ResourceDictionary dictionary = new ResourceDictionary(); SolidColorBrush brush = new SolidColorBrush(); brush.Color = Colors.Red; dictionary.Add("redBrush", brush); Demo
  • 19. XAML dynamisch laden  XAML ist ein Serialisierungsformat  Lesen via XamlReader  Schreiben via XamlWriter Demo
  • 20. Sessioninhalt  XAML Basics  Elemente und Attribute  Magie  TypeConverter  Markup Extensions  …
  • 21. Danke Twitter: @thomasclaudiush Homepage: www.thomasclaudiushuber.com Mail: thomas.huber@trivadis.com Slides/Demos: www.thomasclaudiushuber.com/blog