WPF Desktopové aplikace

Podobné dokumenty
Desktop GUI. IW5 - Programování v.net a C# Desktop GUI

Vývoj mobilních aplikací pomocí frameworku Xamarin

Vývoj mobilních aplikací pomocí frameworku Xamarin

LEKCE 4. Design aplikace, rozmístění a polohování prvků. Rozmístění prvků prezentačního rozhraní

CineStar Černý Most Praha

Obsah. Úvod 11 Zpětná vazba od čtenářů 13 Errata 14 Poznámka ke kódům 14

Google Web Toolkit. Martin Šurkovský, SUR března Katedra informatiky

Efektivní vývoj mobilních aplikací na více platforem současně. Mgr. David Gešvindr MCT MSP MCPD MCITP

1 - Úvod do platformy.net. IW5 - Programování v.net a C#

UNIVERZITA PARDUBICE. Fakulta elektrotechniky a informatiky. Vývoj grafických aplikací s využitím WPF Jiří Boš

Základy datových vazeb Silverlightu. Funkce Silverlightu 2. Podpora jazyků a technologie.net Framework

vjj 1. events, triggers.net

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

Jazyk C# (seminář 9)

MVVM pro desktop i web

První kapitola úvod do problematiky

Kontrolky ve WPF. Jan Lasac. Vedoucí bakalářské práce: Ing. Václav Novák, CSc. JIHOČESKÁ UNIVERZITA V ČESKÝCH BUDĚJOVICÍCH.

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

Stručný obsah. Část I. Část II. Část III. Úvod do vývoje v prostředí Visual Studio 25. Návrh uživatelského rozhraní 127

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox

UJO Framework. revoluční architektura beans. verze

Tvorba informačních systémů

Microsoft Silverlight 2.0

Tvorba informačních systémů

PV239/WP. Vývoj univerzálních Windows Store aplikací. Mgr. David Gešvindr MCSD: Windows Store MCSE: Data Platform MCT MSP

PREPROCESOR POKRAČOVÁNÍ

Při studiu tohoto bloku se předpokládá, že student je zvládá základy programování v jazyce Java s využitím vývojového prostředí NetBeans.

Vývoj Internetových Aplikací

Přehled základních html tagů

Technologie Windows Presentation Foundation. The Technology of Windows Presentation Foundation

Dnešní téma. Oblasti standardizace v ICT. Oblasti standardizace v ICT. Oblasti standardizace v ICT

Vysoká škola ekonomická v Praze Fakulta informatiky a statistiky. Vyšší odborná škola informačních služeb v Praze. Petr Šamša

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

Pokročilé techniky tvorby sestav v Caché. ZENové Reporty

(X)HTML, CSS a jquery

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Windows a real-time. Windows Embedded

01. HODINA. 1.1 Spuštění programu VB Prvky integrovaného vývojového prostředí. - pomocí ikony, z menu Start.

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Základy objektové orientace I. Únor 2010

Jazyk C# (seminář 7)

Seznámení s prostředím dot.net Framework

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 26.3.

Jazyk C# (seminář 3)

TVORBA WEBOVÝCH STRÁNEK

APLIKACE XML PRO INTERNET

Základní úlohy: vytvoření dokumentu...13

Jazyky pro popis dat

Kapitola 5 WCF, webové služby a mezidoménové zásady

Silverlight aplikace pro Dynamics CRM

1: Úvod 9. Co a kde v knize naleznete... 9 Zdroje Doporučení pro další studium... 11

1. Dědičnost a polymorfismus

Zápis programu v jazyce C#

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ TECHNOLOGIE SILVERLIGHT DIPLOMOVÁ PRÁCE. VEDOUCÍ PRÁCE Ing. STANISLAV UCHYTIL, Ph. D.

Novinky ve Visual Studio Tomáš Kroupa

Tvorba internetových aplikací pomocí technologie Microsoft Silverlight

Programování v jazyku C# II. 4.kapitola

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ. Fakulta elektrotechniky a komunikačních technologií BAKALÁŘSKÁ PRÁCE

CSS Stylování stránek. Zpracoval: Petr Lasák

KMI / TMA Tvorba mobilních aplikací. 3. seminář ZS 2016/2017 Středa 13:15-15:45

Jazyk XSL XPath XPath XML. Jazyk XSL - rychlá transformace dokumentů. PhDr. Milan Novák, Ph.D. KIN PF JU České Budějovice. 9.

(Enterprise) JavaBeans. Lekce 7

Úvod do programovacích jazyků (Java)

Třídy. Instance. Pokud tento program spustíme, vypíše následující. car1 má barvu Red. car2 má barvu Red. car1 má barvu Blue.

Cvičné příklady Hodina 2

Obsah přednášky. Představení webu ASP.NET frameworky Relační databáze Objektově-relační mapování Entity framework

GUI. JavaFX. Java UI, letní semestr 2017/2018 1

Jazyk C# (seminář 6)

Virtuální metody - polymorfizmus

Obsah Úvodem... 5 Co je to vlastně formulář... 6 Co je to šablona... 6 Jak se šablona uloží... 6 Jak souvisí formulář se šablonou...

Takto chápanému druhu objektů se říká TŘÍDA.

Tvorba informačních systémů

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové technologie

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

Projekt - Informatika 2 Program pro práci s daty projektu OC10011

8 Třídy, objekty, metody, předávání argumentů metod

Dynamicky vázané metody. Pozdní vazba, virtuální metody

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové technologie

Windows Presentation Foundation & Data Binding

Návrh aplikace. Project Westpon. Inteligentní simulátor budov. Martin Mudra, Jan Smejkal, Onřej Macoszek, Marek Žehra, Jiří Slivárich

VY_32_INOVACE_INF.19. Inkscape, GIMP, Blender

GUI. Systémová integrace pro desktopové aplikace

IW5 - Programování v.net a C# 4 Pokročilé konstrukce C#

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

NSWI096 - INTERNET. CSS kaskádové styly. Mgr. Petr Lasák

INFORMAČNÍ SYSTÉMY NA WEBU

Jazyk C# a platforma.net

Platforma.NET 11.NET Framework 11 Visual Basic.NET Základní principy a syntaxe 13

Reaktivní programování v.net

Generické programování

Klíčová slova: OOP, konstruktor, destruktor, třída, objekt, atribut, metoda

NetBeans platforma. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

NSWI096 - INTERNET JavaScript

Dědičnost. seskupování tříd do hierarchie. potomek získá všechny vlastnosti a metody. provádí se pomocí dvojtečky za názvem třídy.

KMI / TMA. Tvorba mobilních aplikací. 3. seminář ZS 2017/2018 ČTVRTEK 13:15-15:45

Zobrazování bannerů podporují pouze nově vytvořené šablony motivů vzhledu.

Transkript:

WPF Desktopové aplikace Strana 1

WPF - Teorie Trocha teorie (snad) nikoho nezabije! Strana 2

Co to je WPF? Windows Presentation Foundation (WPF) Nový grafický systém pro Windows Zašťiťuje tvorbu rich-media aplikací Přináší čistou separaci rolí mezi UI (XAML) a business logic (C#, VB.NET) Ovlivněn technologiemi jako je HTML, CSS, Flash Hardwarová akcelerace Strana 3

WPF - Vektorová grafika Všechny aplikace využívající WPF jsou Direct3D Direct3D (součást DirectX) se používá v grafických aplikacích cílících na výkon Vykreslení akcelerováno grafickou kartou Výsledek: vysoce kvalitní rich-media UI Vektorová grafika zajišťuje přiblížení, změnu rozměrů bez ztráty kvality WPF implementuje float point system logických pixelů 32-bit ARGB barevné spektrum Strana 4

WPF - Textový model WPF umožňuje využít rozsáhlou podporu typografických a text renderujících funkcí Vytváří mezinárodní fonty z kompozitních fontů WPF renderovací engine využívá ClearType technologii Použití před-renderovaných textů uložených ve video paměti Architektura WPF není závislá na rozlišení Strana 5

WPF - Animace WPF podporuje časované animace Časovacě jsou inicializované a manažované v řežii WPF Změny na obrazovce jsou koordinované použitím storyboard Animace mohou bý iniciovány Pomocí externích událostí Včetně vstupů od uživatele Animace může být definována na úrovni objektů přímo v rámci XAML Strana 6

WPF Audio a Video WPF přináší podporu zakomponování audia a videa do UI Podpora audia je tvořena tenkou vrstvou nad existující Win32 a WMP funkcionalitou Podpora videa nativně umožňuje použití pormátů WMV, MPEG a podmnožinu AVI Vztahy mezi videm a animacemi jsou podporovány Využíváme oboje k vytvoření dynamičnosti obsahu Animace mohou být synchronizovány s medii Strana 7

WPF Styly a Šablony 1/2 Ve WPF je styl sadou vlastností aplikovaných na obsah za účelem docílení změny v renderování Konceptuálně stejné jako CSS Např. změna fontu u tlačítka Button control Požití převážně pro standardizaci vlastností nastavených u jednotlivých prvků WPF styly obsahují specifické vlastnosti pro tvorbu apliakceí Např. možnost provedení různých vizuálních efektů na základě akce provedené uživatelem Strana 8

WPF Styly a Šablony 2/2 Šablona ve WPF umožňuje kompletní změny v UI jakýchkoliv WPF prvků Dostupné šablony ControlTemplate sdileni vzhledu napric UI Controls ItemsPanelTemplate vzhled panelu, napr. ListBox DataTemplate vhled objektů v panelech HierarchicalDataTemplate - vzhled objektů v panelech s hierarchickou strukturou, napr. TreeView Strana 9

WPF Commandy 1/2 Command je abstraktnější a volně spojovanou (loosely-coupled) verzí událostí (events) Např. Copy, cut, paste, save, atd... WPF podpora commandů umožňuje šetření kódu, který je nutné napsat Přínáší flexibilitu změnit UI bez rozbití back-end logiky Commandy mají action, source, target a binding Strana 10

WPF Commandy 2/2 Proč používat commandy? WPF definuje řadu předpřipravených commandů Commandy obsahují automatickou poporu pro vstupní akce Některé WPF komponenty mají vestavěno chování spjaté s různými commandy Např. Button Efekt => čistý kód, nepoužívá se Code-behind Commandy jsou uřčeny pro: Vykonaní akce Ověření, zdali je akci možné vykonat Strana 11

Deklarace UI pomocí XAML XAML = extensible Application Markup Language Deklarativní jazyk říká Co, neříká Jak Popisuje primárně chování a integraci UI komponent Formát pro serializaci hierarchie objektů.net namespaces reprezentuje pomocí XML namespaces Typicky propojen s Code-behind třídou Strana 12

WPF vykreslení objektů WPF pracuje na nejnižší úrovni s tvary (shapes) nikoliv s pixely Tvary jsou vektorové vyjádřeny a mohou být lehce manipulovány Vývojář vytvoří tvar a nechá WPF, aby jej vykreslilo tou nejoptimalizovanější cestou WPF přináší řadu předpřipravených tvarů jako line, rectangle, ellipse, path a jine Objekty tvarů mohou být použity uvnitř panelů (panels) a dále uvnitř většiny WPF komponent Strana 13

XAML - základy XAML je založený na XML Určený pro deklaraci a inicializaci.net objektů Použítí XAML v WPF pro snadnou ruční editaci člověkem Využit pro separaci UI od C# kódu XAML obsahuje hierarchii elementů reprezentující vizuální objekty Tyto objekty nazýváme user interface elemnts neboli UI elementes Strana 14

Elementy a Atributy - Vlastnosti objektů UI elementy společnou podmnožinu vlastností a funkcí Např. Width, Height, Cursor a Tag vlastnosti (property) Deklarování XML elementu v XAML Ekvivalentní k instancializaci objektu přes bezparametrový konstruktor Nastavení atributu na objektu elementu Ekvivalentní k přiřazení do vlastnosti daného jména Atribut jednoduché propertie Element UI Elementy, složitější propertie instanciované třídy Výchozí vlastnost Strana 15

XAML základy - ukázka <Window x:class="helloworld.mainwindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:helloworld" mc:ignorable="d" Title="Hello, WPF" Height="100" Width="330"> <Grid> <Button x:name="okbutton" Content="Ok" Height="30" Width="300" </Grid> </Window> Strana 16

XAML ukázka - vysvětlení Window/UserControl/ - z čeho tato třída dědí x:class - třída s Code-behindem xmlns:x - speciální namespace pro účely XAMLu (povinný) xmlns:d vlastnosti použité v designeru, ignorují se (mc:ignorable) xmlns - namespace s vestavěnými komponentami v WPF Kořenový element Window deklaruje partial class Width, Height, Title jsou XAML vlastnosti (properties) Element Button deklaruje prvek tlačítko Strana 17

Propertie elementy Ne všechny vlastnosti (propertie) musí nabývat pouze hodnot typu string Některé property mohou obsahovat instance objektů XAML obsahuje syntaxi pro nastavení hodnot komplexních vlastností nazvanou propertie elements Ve formě elementu TypeName.PropertyName obsaženém uvnitř TypeName elementu <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="1*"/> <ColumnDefinition Width="2*"/> </Grid.ColumnDefinitions> </Grid> Strana 18

UI deklarativně vs imperativně V WPF může být každý element vytvořen buď deklaradivně nebo programově Není žádný rozdíl ve vykonávání či rychlosti vykonávání Instanciování elementu z Code-behind jde proti myšlence XAML Stejný přístup jako u Windows Forms MainWindows.xaml: <Button Content="Click ME!" /> MainWindow.xaml.cs: var button = new Button(); button.content = "Click ME!"; Strana 19

Deklarativni UI Idea 1/2 Designér, návrhář UI používá Expression Blend edituje XAML soubory Vývojář používá Visual Studio pracuje s code-behind V praxi se to často překrývá Strana 20

Deklarativni UI Idea 2/2 Co se stane když, se nepoužívá XAML v WPF? Ztrácí se myšlenka separace zájmů separation of concerns. Designér a programátor nemohou zaráz pracovat na stejném souboru. Co se stane když, vytvoříte objekt deklarativně? Objekt se instanciuje voláním bezparametrového konstruktoru. Všechna magie se odehraje v InitializeComponent(); Strana 21

Silverlight Silverlight je cross-platform, cross-browser plugin, který obsahuje technologii založenou na WPF Rich Internet Application (RIA) platforma Obsahuje XAML a podmnozinu WPF Umoznruje rich-media funkcionalitu jako je video, vektorová grafika a animace Silverlight a WPF sdílí stejnou XAML prezentační vrstvu Obě technologie jsou si velmi podobné, ale Silverlight je limintovaný v mnoha aspektech. Deprecated - konec podpory Silverlight 5, Rijen 2021 Strana 22

WPF - prakticky Strana 23

Hierarchie tříd System.Object System.Windows.DependencyObject podpora dependency properties System.Windows.UIElement metody pro vykreslování System.Windows.FrameworkElement podpora pro databinding, styly atd. System.Windows.Controls.Control Bázoví třída pro definici UI elements Strana 24

Panely - layout jediné komponenty, které mohou mít víc potomků slouží k rozmístění prvků na ploše Tendence ve WPF vektorová grafika přizpůsobení UI velikosti plochy "gumový layout" System.Object System.Windows.Threading.DispatcherObject System.Windows.DependencyObject System.Windows.Media.Visual System.Windows.UIElement System.Windows.FrameworkElement System.Windows.Controls.Panel Strana 25

Panely - layout Canvas absolutní pozicování v pixelech vlastnosti Canvas.Top, Canvas.Left Grid tabulkový layout vlastnosti Grid.Row, Grid.Column, Grid.RowSpan, Grid.ColumnSpan StackPanel komponenty vedle sebe nebo pod sebou Vlastnost StackPanel.Orientation WrapPanel komponenty vedle sebe a pak pod sebou, ci opacne Vlastnost WrapPanel.Orientation Strana 26

Content Controls Jen jeden potomek Border rámeček a pozadí okolo obsahu Button Label CheckBox, RadioButton ScrollViewer pokud se obsah nevejde, objeví se posuvníky System.Object System.Windows.Threading.DispatcherObject System.Windows.DependencyObject System.Windows.Media.Visual System.Windows.UIElement System.Windows.FrameworkElement System.Windows.Controls.Control System.Windows.Controls.ContentControl Strana 27

Vlastnosti pro pozicování Width, MinWidth, MaxWidth Height, MinHeight, MaxHeight HorizontalAlignment, VerticalAlignment zarovnání v rámci rodičovského elementu HorizontalContentAlignment, VerticalContentAlignment zarovnání vnitřního obsahu Margin, Padding vnější a vnitřní okraj System.Object System.Windows.Threading.DispatcherObject System.Windows.DependencyObject System.Windows.Media.Visual System.Windows.UIElement System.Windows.FrameworkElement Strana 28

Formátovaný text TextBlock vlastnost TextWrapping uvnitř Run FontWeight, FontSize, Foreground LineBreak, Span, Hyperlink, Bold, Italic, Underline <TextBlock> Sample text with <Bold>bold</Bold>, <Italic>italic</Italic> and <Underline>underlined</Underline> words. Username: <Run FontWeight="Bold" Text="{Binding UserName}"/> </TextBlock> Strana 29

Další komponenty Calendar DatePicker Image ProgressBar TextBox Strana 30

DataContext vlastnost třídy FrameworkElement pokud není nastaven, přebírá se z rodiče ve stromu komponent ideální prostředek pro databinding typu object může obsahovat cokoliv Strana 31

Typy bindingu Proti aktuálnímu DataContextu {Binding} Aktuální DataContext {Binding Name} Vlastnost (property) Name na aktuálním DataContextu {Binding Name.Length} DataContext.Name.Length Proti pojmenovanému elementu vlastnost x:name {Binding Path=Text, ElementName=TextBox1} vlastnost Text objektu TextBox1 Strana 32

Směr bindingu Vlastnost Mode OneTime jen jednou na začátku OneWay jedním směrem ze zdroje do cíle TwoWay obousměrně změna v cíli změní i zdroj OneWayToSource jedním směrem od cíle ke zdroji Default Uživatelsky editovatelné mají TwoWay, ostatní OneWay Zdroj vlastnost, na kterou bindujeme Cíl komponenta, která má {Binding} Strana 33

Směr bindingu OneWay a TwoWay reaguje na změny zdroje zdroj o nich musí dát nějak vědět objekt implementuje INotifyPropertyChanged při změně vlastnosti vyvolá událost PropertyChanged public class MainViewModel : INotifyPropertyChanged { private string _name; public event PropertyChangedEventHandler PropertyChanged; public string Name { get { return _name; } set { _name = value; this.onpropertychanged(); this.onpropertychanged(nameof(fancyname)); } } public string FancyName => $"***this.name***"; } [NotifyPropertyChangedInvocator] protected virtual void OnPropertyChanged([CallerMemberName] string propertyname = null) { this.propertychanged?.invoke(this, new PropertyChangedEventArgs(propertyName)); } Strana 34

Kolekce Vlastnost objektu je kolekce položky jsou reprezentovány kolekcí vnitřních elementů System.Object System.Collections.* Implementují rozhraní IEnumerable Pro zobrazení změn musí kolekce implementovat rozhraní INotifyCollectionChanged public class MainViewModel { public ObservableCollection<MenuItem> MenuItems { get; } = new ObservableCollection<MenuItem>(); } Strana 35

ItemsControl ComboBox ListBox TabControl TreeView System.Windows.Controls.Control System.Windows.Controls.ItemsControl Strana 36

ItemsControl Kolekce Items obecné objekty, umístí se dovnitř Vlastnost ItemsSource chce IEnumerable, pomocí něj vygeneruje položky Šablona ItemTemplate definuje vzhled a obsah položky DataContext je aktuální prvek kolekce <ListBox ItemsSource="{Binding MenuItems}"> <ListBox.ItemTemplate> <DataTemplate> <StackPanel> <TextBlock Text="{Binding Title}" /> <TextBlock Text="{Binding SubTitle}" /> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox> Strana 37

ItemsControl změna kolekce Změna ItemsSource přiřadíme jinou kolekci obsah se smaže a vygeneruje pro nová data změníme vlastnost prvku v kolekci jen u dependency property nebo INotifyPropertyChanged přidáme nebo odebereme prvek v kolekci kolekce musí implementovat INotifyCollectionChanged Strana 38

ItemsControl - ListBox vlastnost SelectedItem přímo objekt, který je bindovaný vlastnost SelectedValuePath co se z objektu pouzije jako hodnota objekt.vlastnost1.vlastnost2 atd. vlastnost SelectedValue hodnota dané položky <ListBox /> ItemsSource="{Binding MenuItems}" SelectedItem="{Binding SelectedItem}" SelectedValue="{Binding SelectedTitle}" SelectedValuePath SelectedValuePath="@Title" Strana 39

INotifyCollectionChanged ObservableCollection<T> implementuje toto rozhraní Vlastní kolekce podporu přidáme Existující kolekce např. napsat kolem ní "wrapper" Strana 40

Commands Imeplementuje rozhrani ICommand public interface ICommand Metody Execute(Object) definuje metodu, která se bude volat, když je command spuštěn CanExecute(Object) definuje metodu, která ověří, zdali je command může být spuštěn v aktuálním stavu Event CanExecuteChanged Událost je zavolána v případně, že se změní stav a command je možné vykonat Strana 41

Commands - RelayCommand RelayCommand MVVMLight, Telerik MyViewModel.cs: private RelayCommand _mycommand; public RelayCommand MyCommand => _mycommand?? (_mycommand = new RelayCommand(Execute,CanExecute); private void Execute() { //... } private bool CanExecute() { return 1 == 1; } Strana 42

Cvičení ABCDEFGH AAAA BBBB CCCC DDDD abcd Lorem ipsum dolores sit amet abcd Lorem ipsum dolores sit amet abcd Lorem ipsum dolores sit amet abcd Lorem ipsum dolores sit amet abcd Lore Stranaipsum 43 dolores ABCD Lorem ipsum dolores sit amet Lorem ipsum dolores sit amet Lorem ipsum dolores sit amet. ABCD Lorem ipsum dolores sit amet AAAA BBBB CCCC DDDD EEEE