WPF Layout. Thomas Claudius Huber

Ähnliche Dokumente
Control Templates. Thomas Claudius Huber

WCF RIA Services Datengetriebene Apps. Thomas Claudius Huber Senior Consultant Trivadis AG

Window Presentation Foundation

Thomas Claudius Huber. Alles, was Sie über XAML wissen müssen

Die S.O.L.I.D-Prinzipien für C# Entwickler Thomas Claudius

Galileo Computing. Einstieg in WPF 4.5. Grundlagen und Praxis. Wie Sie die Windows Presentation Foundation richtig einsetzen

GUI-Programmierung 2 - WPF

Leseprobe. Jörg Wegener. WPF 4.5 und XAML. Grafische Benutzeroberflächen für Windows inkl. Entwicklung von Windows Store Apps

WPF - Windows Presentation Foundation

Zeitlich abhängig von OWB?

Windows Presentation Foundation

MVVM in Windows 8 und Windows Phone 8

Thomas Claudius Huber Trivadis AG. Silverlight 4.0 vier gewinnt?

21 WPF die Grundlagen

Modernisierung von Forms durch neues Look&Feel

Windows Presentation Foundation

Norbert. Eder. Windows Presentation Foundation 4. Einführung und Praxis. inklusive CD-ROM

CI mit Forms im Weblogic Umfeld: CI mit Forms geht das

Windows Presentation Foundation - WPF

WPF Steuerelemente. Dr. Beatrice Amrhein

Dimensionale Modellierung mit Oracle BI EE und Oracle OLAP Tipps und Tricks aus der Praxis

Inhalt. Vorwort Das.NET Framework Das Programmiermodell der WPF Einführung in XAML... 45

Thomas Theis. Einstieg in WPF. Grundlagen und Praxis

Statische und Nichtstatische Methoden Properties/ Eigenschaften

Modellierung agiler Data Warehouses mit Data Vault Dani Schnider, Trivadis AG DOAG Konferenz 2015

Das Configuration Management im Oracle-Datenbank-Umfeld

Windows Presentation Foundation

Integration von Web Services in J EE Anwendungen mit XFire. 1/26 André Janus - Integration von Web Services in J EE Anwendungen mit XFire

Know-how Sammlung, Verteilung und Pflege bei einem mittelständischen IT-Dienstleister

Windows Presentation Foundation - Crashkurs

Oracle Virtual Private Database

Windows Presentation Foundation - Crashkurs

Vererbung & Schnittstellen in C#

FB Automatisierung und Informatik Grafische Nutzerschnittstellen mit.net Thema: Erstellen eines Rahmens für ein CAD-Programm

Funktionale und Objekt-Orientierte Programmierkonzepte

Vererbung und Polymorphie

Blend für Nicht-Designer

Einstieg in die Informatik mit Java

Buchen Sie hier Ihr Training

6. Jahreskongress der IT-Freiberufler: Oracle-Wettbewerbsvorteile durch qualifizierte IT-Ausbildung

Vererbung, Polymorphie

Exkursion zu Capgemini Application Services Custom Solution Development. Ankündigung für Februar 2013 Niederlassung Stuttgart

Beratung Messbar / Transparent / Reproduzierbar

WPF Bindung. Dr. Beatrice Amrhein

1 Abstrakte Klassen, finale Klassen und Interfaces

Thomas Claudius Huber Trivadis AG. Neuerungen im Windows 8.1 UI für Entwickler

Programmiermethodik 3. Klausur Lösung

Unterstützt oder beschäftigt Ihr CRM- System die Mitarbeiter bei Ihrer täglichen Arbeit?

C# für Einsteiger Modul 10: Oberflächen mit WPF eden market Autor: Anton Kölbl

Implementieren von Klassen

Programmieren in Java -Eingangstest-

Programmiermethodik 1. Klausur

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

XamlKonverter Implementierungsdetails

ANWENDUNGSSOFTWARE CSS

FEHLERTOLERANTE LADEPROZESSE IN ORACLE

Die Oracle BI Trilogie von Trivadis

Handbuch für die Erweiterbarkeit

Projekt Gold oder Der Weg führt zum Ziel Team Collaboration als Meta-Prozess 18. Entwurfsmuster

Gobales Gedächtnis. AntMe. Sebastian Loers. lb-sys.info. Projekt: AntMe - Globales Gedächtnis (Version 1.0)

Innere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

LOB-Anwendungen mit Silverlight

Wie sichert man APEX-Anwendungen gegen schädliche Manipulationen und unerwünschte Zugriffe ab?

Upgrade auf APEX 5. 9 Datenbanken, 400 Workspaces, über 1000 Anwendungen ein Erfahrungsbericht Carola

Trivadis-Gadgets im Dienste ihrer Qualität: FAAT und PL/SQL Cop

Tutoraufgabe 1 (Seiteneekte):

Windows Presentation Foundation (WPF) -Grundlagen -Steuerelemente. Dr. Beatrice Amrhein

Oracle Fusion Middleware Forms & Reports - Go Live!

Info B VL 11: Innere Klassen/Collections

Einführung in C# Teil 3. Matthias Nübling

Von$Siebel$zu$Fusion$als$evolu0onärer$Weg$$$$$$$$$$$$$$$$$$$$$$$ Alexander$Doubek$ Senior$Manager$ $

GUI-Programmierung 2 - Windows Presentation Foundation (WPF)

WPF. Übersicht. Komponenten & Frameworks Seite 1

CORBA. Eine kurze Einführung. Common Object Request Broker Architecture. Ying Lu

Vorausgesetzte Grundkenntnisse. Inhalt. Klassenhierarchie und Vererbung. Vererbung. Klassenhierarchie und Vererbung. Einführung in C# Teil 3

APEX Datenverwaltung Wo sind die Daten gerade? Dr. Gudrun Pabst

Windows Presentation Foundation (WPF) -Grundlagen -Steuerelemente. Dr. Beatrice Amrhein

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

THEMA: GUT VORBEREITET IST HALB ZERTIFIZIERT ANTWORTEN ZUR SAS VISUAL ANALYTICS-ZERTIFIZIERUNG" THOMAS WENDE

Elisabeth Stettler. Business Consultant. Andreas Gerig. Consultant/Projekt Manager.

Fragen zur OOP in Java

Ein UI in zwei Welten - Controls in HTML5 und WPF. Timo Korinth

Objektorientierte Programmierung Studiengang Medieninformatik

O-BIEE Einführung mit Beispielen aus der Praxis

Inhaltsverzeichnis. Jörg Wegener. Windows Presentation Foundation - WPF. Grafische Benutzerschnittstellen mit.net 3.5

Transkript:

WPF Layout Thomas Claudius Huber thomas.huber@trivadis.com www.thomasclaudiushuber.com

Thomas Claudius Huber.NET Senior Consultant @Trivadis Basel Spezialisiert auf Silverlight und WPF Autor der umfassenden Handbücher zu Silverlight und WPF Entwickelt im Business-Umfeld hauptsächlich WPF- und Silverlight- Anwendungen

Trivadis Solutions Portfolio and competences CUSTOMER Business departments BUSINESS INTEGRATION SERVICES IT SOLUTIONS, SERVICES, & PRODUCTS Business Intelligence Enterprise Content Management Infrastructure Engineering Application Development IT departments Training Managed Services Integration, Application Performance Management, Security TECHNOLOGIES Microsoft, Oracle, IBM, Open Source

Trivadis facts & figures Hamburg 11 Trivadis locations with more than 550 employees Financially independent and sustainably profitable Key figures 2010 Düsseldorf Frankfurt ~170 employees Revenue CHF 101 / EUR 73 mio. Services for more than 700 clients in over 1 800 projects Over 170 Service Level Agreements Basel Bern Lausanne Stuttgart Freiburg Zurich ~370 employees Munich Vienna ~20 employees More than 5'000 training participants Research and development budget: CHF 5.0 / EUR 3.6 mio.

Layout-Prozess Layout-Properties Transformationen Panels der WPF Attached Properties

Der Layout-Prozess Wird ein FrameworkElement zum ersten Mal gezeichnet, werden folgende Methoden auf ihm aufgerufen: Measure Arrange OnRender Die Methoden werden während dem sogenannten Layout-Prozess aufgerufen Der Layout-Prozess ist ein 2-stufiger Prozess Stufe eins ist Measure Stufe zwei ist Arrange Während dem Layout-Prozess «sprechen» Eltern mit ihren Kindelementen

Schritt 1: Measure Eltern fragen Kinder, wie gross sie gerne sein möchten Measure-Methode wird auf jedem Kind aufgerufen - DesiredSize-Property enthält das Ergebnis Das Elternelement kann die eigene Grösse berechnen Zur Teilnahme an diesem Schritt in eigenen Elementen MeasureOverride überschreiben

Schritt 2: Arrange Im zweiten Schritt des Layout-Prozesses ordnen Eltnern ihre Kinder an Arrange-Methode wird auf jedem Kind aufgerufen Kind bekommt dadurch eine Position und finale Grösse Finale Grösse wird in der RenderSize-Property gespeichert. Ergebnis: Kinder wissen Position und Grösse Zur Teilnahme an diesem Schritt in eigenen Elementen ArrangeOverride überschreiben

Der Layout-Prozess wird ausgeführt Wenn sich eine bestimmte Dependency Property ändert, wie Width oder Height eines FrameworkElements wenn ein Element zu einem Panel hinzugefügt wird

Der Layoutprozess Implementieren eines einfachen Panels

Layout-Prozess Layout-Properties Transformationen Panels der WPF Attached Properties

Layout-Properties von FrameworkElement Width und Height Grösse des Elements festlegen Default-Wert ist Double.NaN Um die tatsächliche Grösse auszulesen, ActualWidth und ActualHeight nutzen Margin Definiert den äusseren Rand eines Elements Padding (nur für Control-Subklassen) Definiert den inneren Rand eines Elements

Layout-Properties von FrameworkElement HorizontalAlignment Nimmt einen Wert der gleichnamigen Emun entgegen: Left, Center, Right, Stretch VerticalAlignment Nimmt einen Wert der gleichnamigen Emun entgegen: Top, Center, Bottom, Stretch Die Ausrichtung hängt vom Panel ab, welches das Element enthält.

Layout-Properties von FrameworkElement Die Visibility-Property Nicht vom Typ bool, sondern vom Typ Visibility (Enum) Die Visibility-Enum hat die folgenden drei Werte: Visible Hidden Collapsed

Layout-Prozess Layout-Properties Transformationen Panels der WPF Attached Properties

Transformationen Transformation: Eine Übersetzung von einem in ein anderes Koordinatensystem Transform ( Abstract) RotateTransform ScaleTransform SkewTransform TranslateTransform MatrixTransform TransformGroup

Die Transform-Properties Ein Transform-Objekt lässt sich zwei Properties eines FrameworkElements zuweisen RenderTransform-Property (geerbt von UIElement) LayoutTransform-Property RenderTransform-Property Das Element wird nach dem Layoutprozess transformiert. LayoutTransform-Property Das Element wird vor dem Layoutprozess transformiert.

RenderTransform RenderTransform findet nach dem Layoutprozess statt Die Transformation verwendet einen Ursprungspunkt Dieser wird über die RenderTransformOrigin-Property auf dem Element gesetzt, das die Transformation enthält.

Transformationsklassen RotateTransform Angle-Property zum Rotieren des Elements setzen ScaleTransform ScaleX- und ScaleY-Property zum Skalieren SkewTransform AngleX- und AngleY-Property zum Stauchen TranslateTransform X- und Y-Property zum Verschieben Funktioniert nur, wenn das TranslateTransform-Objekt der RenderTransform-Property zugewiesen wird.

Transformationen

TransformGroup Zum gruppieren von Transform-Objekten Reihenfolge der gruppierten Transform-Objekte ist wichtig.

Layout-Prozess Layout-Properties Transformationen Panels der WPF Attached Properties

WPF-Panels Panel ist die Basisklasse FrameworkElement Panel (abstract) Canvas StackPanel WrapPanel ToolBarPanel DockPanel Grid UniformGrid TabPanel ToolBarOverflowPanel VirtualizingPanel (abstract) VirtualizingStackPanel

Das Canvas Positioniert absolut Use Attached-Properties Canvas.Left Canvas.Top Canvas.Bottom Canvas.Right <Canvas> <Button Canvas.Top="30".../>... </Canvas> Für überlappende Elemente wird Zindex-Property gesetzt Panel.ZIndex (default 0) Ohne Zindex zeichnen sich die Elemente gemäss Ihrer in XAML definierten Reihenfolge übereinander

StackPanel und WrapPanel StackPanel Stapelt Elemente Orientation-Property legt die Richtung fest WrapPanel Stapelt Elemente und macht einen Umbruch, falls der Platz nicht ausreicht

DockPanel Stapelt Elemente links, oben, rechts und unten Definiert dazu die Attached-Property Dock Unglücklicherweise gibt es kein Splitter-Control

Das Grid Enthält eine RowDefinitions- und ColumnDefinitions- Property zum Erstellen von Zeilen und Spalten Auf Kindern werden Attached-Properties gesetzt: Grid.Row Grid.RowSpan Grid.Column Grid.ColumnSpan Elemente in einer Zelle zeichnen sich übereinander. Zindex nutzen

Das Grid Grössenangaben von Column-/RowDefinitions Absolut - Grössenangabe in Pixeln Auto * - Grösse basiert auf der DesiredSize des Elements in der Zeile/Spalte - Der übrige Platz <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="10"/> <RowDefinition Height="2*"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <Button Content="Hello"/> <Rectangle Fill="Red" Grid.Row="1"/> <Rectangle Fill="Blue" Grid.Row="2"/> <Rectangle Fill="Lime" Grid.Row="3"/> </Grid>

Grid - Grössenangaben

Das Grid Unterstützt den GridSplitter Benutzer kann Grösse von Zeilen/Spalten anpassen Unterstützt sogeannte SharedSizeGroups Spannend für DataTemplates Ist das Panel, mit dem sich das Verhalten aller anderen Nachbauen lässt

GridSplitter & SharedSizeGroups

Layout-Prozess Layout-Properties Transformationen Panels der WPF Attached Properties

Attached Properties Kommen im Layout oft zum Einsatz Grid.Row, DockPanel.Dock, Canvas.Left etc. Sind eine spezielle Form von Dependency Properties Werden nicht auf Objekten der Klasse gesetzt, welche die Attached-Property definiert, sondern auf Objekten anderer Klassen

Dependency Properties Es gibt zwei Arten von Dependency-Properties Jene gekapselt durch eine klassische.net Property Jene gekapselt durch statische Methoden, auch als Attached-Properties bezeichnet Bei der WPF kann eine Property von verschiedenen Quellen gesetzt werden: animation style trigger Lokaler Wert Dependency Properties bestimmen, von welcher Quelle der Wert genommen wird. http://www.thomasclaudiushuber.com/blog/2008/03/13/dependencyproperties-value-precendence/

Wie funktionieren Dependency Properties Die zentralen Klassen sind DependencyObject und DependencyProperty Eine DependencyProperty-Instanz definiert den «Schlüssel» zum eigentlichen Wert Daher werden solche Instanzen in statischen Feldern gespeichert, die mit dem Suffix «Property» enden. Eine DependencyObject-Instanz enthält die Methode GetValue zum Lesen des Wertes und SetValue/ClearValue zum Setzen/Löschen eines lokalen Wertes Alle Methoden nehmen den Schlüssel (DependencyProperty) als Parameter entgegen

Auswirkung Um die Breite eines Buttons zu setzen, gibt es zwei Möglichkeiten Möglichkeit 1:.NET-Property-Wrapper Button btn = new Button(); btn.width = 25; Möglichkeit 2: SetValue-Methode aus DependencyObject Button btn = new Button(); btn.setvalue(button.widthproperty, 25);

Dependency Property public class WPFCourse:DependencyObject { // The Key for the Property public static readonly DependencyProperty DaysProperty = DependencyProperty.Register("Days", typeof(int), typeof(wpfcourse), new FrameworkPropertyMetadata(3)); } // A Wrapper to use it like a "normal".net Property public int Days { get { return (int)getvalue(daysproperty); } set { SetValue(DaysProperty, value); } }

Attached Property public class WPFCourseService:DependencyObject { // The Key for the Property public static readonly DependencyProperty DaysProperty = DependencyProperty.RegisterAttached("Days", typeof(int), typeof(wpfcourseservice), new FrameworkPropertyMetadata(3)); // Wrapper method to set it public static void SetDays(DependencyObject d,int value) { if (d == null) throw new ArgumentNullException("d"); d.setvalue(daysproperty, value); } } // Wrapper method to get it public static int GetDays(DependencyObject d) { if (d == null) throw new ArgumentNullException("d"); return (int)d.getvalue(daysproperty); }

Ein Panel mit Attached-Properties implementieren

Layout-Prozess Layout-Properties Transformationen Panels der WPF Attached Properties

Fazit Der Layoutprozess besteht aus den Schritten Measure und Arrange Mit den Properties Width, Height, Margin, HorizontalAlignment, VerticalAlignment lässt sich ein Element in einem Panel positionieren. Das Grid ist das Panel schlechthin

Infos www.thomasclaudiushuber.com www.trivadis.com thomas.huber@trivadis.com www.twitter.com/thomasclaudiush

FRAGEN?

Ihr Feedback ist uns wichtig

Vielen Dank!