Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare ist ein Scribd-Unternehmen logo
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

Weitere ähnliche Inhalte

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