Alles was Sie über XAML wissen müssen

21
Thomas Claudius Huber | Trivadis AG Alles was Sie über XAML wissen müssen

description

XAML ist mittlerweile auf jeder Microsoft-Plattform verfügbar: WPF, Windows-Store-Apps, Windows Phone und Silverlight. In dieser Session lernen Sie die zentralen Möglichkeiten von XAML kennen: Attribute und Elemente, Namespace Mappings, Type Converter, Markup Extensions und vieles mehr.

Transcript of Alles was Sie über XAML wissen müssen

Page 1: Alles was Sie über XAML wissen müssen

Thomas Claudius Huber | Trivadis AG

Alles was Sie über XAML wissen müssen

Page 2: 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 undWindows Store Apps

Page 3: Alles was Sie über XAML wissen müssen

Sessioninhalt XAML Basics

Elemente und Attribute

Magie TypeConverter

Markup Extensions

Page 4: Alles was Sie über XAML wissen müssen

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

Page 5: Alles was Sie über XAML wissen müssen

Warum XAML?

Page 6: Alles was Sie über XAML wissen müssen

Workflow mit XAML

DesignerEntwickler

Visual Studio Blend

XAML

Page 7: Alles was Sie über XAML wissen müssen

Sessioninhalt XAML Basics

Elemente und Attribute

Magie TypeConverter

Markup Extensions

Page 8: Alles was Sie über XAML wissen müssen

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

Page 9: Alles was Sie über XAML wissen müssen

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

Page 10: Alles was Sie über XAML wissen müssen

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

Page 11: Alles was Sie über XAML wissen müssen

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/>

Page 12: Alles was Sie über XAML wissen müssen

1:n-Namespace-Mapping XmlnsDefinitionAttribute auf Assembly nutzen XmlnsPrefix zum Vorschlagen eines Alias Ideal für Bibliotheken mit mehreren

CLR-Namespaces

Page 13: Alles was Sie über XAML wissen müssen

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"

Page 14: Alles was Sie über XAML wissen müssen

Sessioninhalt XAML Basics

Elemente und Attribute

Magie TypeConverter

Markup Extensions

Page 15: Alles was Sie über XAML wissen müssen

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";

Page 16: Alles was Sie über XAML wissen müssen

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

Page 17: Alles was Sie über XAML wissen müssen

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

Page 18: Alles was Sie über XAML wissen müssen

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

Page 19: Alles was Sie über XAML wissen müssen

XAML dynamisch laden XAML ist ein Serialisierungsformat Lesen via XamlReader Schreiben via XamlWriter

Demo

Page 20: Alles was Sie über XAML wissen müssen

Sessioninhalt XAML Basics

Elemente und Attribute

Magie TypeConverter

Markup Extensions

Page 21: Alles was Sie über XAML wissen müssen

Danke

Twitter: @thomasclaudiush

Homepage: www.thomasclaudiushuber.com

Mail: [email protected]

Slides/Demos:www.thomasclaudiushuber.com/blog