Programování v jazyku C# II. 10.kapitola
Obsah Přehled WPF Architektura aplikace Layout aplikace Ovládací prvky 2/30
Proč se uživatelská přívětivost nestala součástí software? Animace Win32 Dokumenty DirectX 3D 2D Je to těžké! MFC Data Binding Ovládací prvky se styly Windows Forms Video HTML 3/30
Potřeba lépe organizovat informace Výzvy Hardwarová inovace přestihuje software Displeje s vysokým DPI Široké obrazovky s možností rotace (TabletPC) GPU roste 3x rychleji než Moorův zákon Přetížení informacemi Dokumenty, hudba, video, fotografie, atd. Potřeba lépe a chytřeji visualizovat informace 4/30
Jednotný přístup k UI, dokumentům a médiím Aplikační model Deklarativní programování - XAML Jednoduchá integrace médií Data binding Bohaté možnosti stylů a témat Hostování uvnitř prohlížeče Grafický model 2D & 3D grafika, rastrová grafika Text Video a audio Animace Model dokumentů Pevné, plovoucí a adaptivní rozložení Pokročilá typografie Řízení práv Media Integration Layer Element Services Aplikační model Model dokumentů Grafický model Composition and Rendering .NET Framework DirectX WPF Nástroje a jazyky Context: First pillar of Avalon UI, docs and media are all just one single platform now. Avalon is based on managed code, as well as DirectX (specifically Direct3D is the rendering engine). You can mix and match graphics, controls, media on a single surface, using layout, animation, styling and data binding to connect them together. 5/30
WPF komponenty Document Services User Interface Services XPS Documents Application Services Controls Databinding Packaging Services Deployment Services Layout Media Integration Layer Base Services Imaging 2D Text Audio XAML Effects 3D Video Accessibility Animation Input & Eventing Composition Engine Property System 6/30
Deklarativní tvorba aplikací WPF přináší model postavený na oddělení grafického návrhu aplikace a aplikační logiky Model známý z ASP.NET Návrh vzhledu pomocí jazyka XAML (eXtensible Application Markup Language) XAML je převeden do zdrojového kódu a přeložen do binární formy Je postaven na existenci neúplných tříd (partial class) XAML nemusí sloužit pouze k definici grafického vzhledu, ale k definici Aplikace jako celku Systémových zdrojů atd. 7/30
Deklarativní programování Návrh uživatelského rozhraní Standardním způsobem Button btn = new Button(); btn.Background = Colors.Red; btn.Content = "Tlačítko!"; this.Children.Add( btn ); Deklarativně v jazyce XAML (eXtensible Application Markup Language) <Button Background="Red">Tlačítko!</Button> 2/30
Kombinace XAML a kódu Typicky je v XAML definován vzhled, animace, vazba na datové zdroje, zachycení a zpracování některých událostí V „kódu v pozadí“ je realizována aplikační logika <Button x:Name="tlacitko" Background="Red" Click="btn_click"> Tlačítko! </Button> XAML partial class Window1 : Window { Button tlacitko; void InitializeComponent() { tlacitko = new Button(); tlacitko.Background = “Red"; tlacitko.Click += btn_click; this.AddChild(tlacitko); } }; partial class Window1 : Window { public Window1() { InitializeComponent(); } public btn_click(object sender, RoutedEventArg e) { … } }; + Kód v pozadí 9/30
Jmenné prostory v XAML kódu Kořenový element každého XAML dokumentu musí deklarovat používané jmenné prostory <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:MojePrvniWPFAplikace.Window1"> <Button … /> </Window> Jmenný prostor Windows Presentation Foundation Jmenný prostor XAML C#/VB.NET jmenný prostor, v němž je založen kód v pozadí 10/30
Navigace v aplikaci WPF aplikace nabízí nový typ „explorer“ navigace Automaticky jsou generována tlačítka Zpět a Vpřed Logika a programová podpora zabudována do objektu aplikace (Application) <TextBlock> Koukni také na stránku <Hyperlink NavigateUri="Window2.xaml">Page 2</Hyperlink>. </TextBlock> <Button Click="nextPage_clicked"> Další stránka </Button> void nextPage_clicked(object sender, RoutedEventArgs e) { NavigationService.Navigate(new Uri("Window2.xaml", UriKind.Relative)); } 11/30
Typy aplikací Plné lokální aplikace Web Browser aplikace Instalovány na lokální počítač Přístup k systémovým zdrojům definován právy uživatele (Full Trust) Web Browser aplikace Běží v prostředí prohlížeče Využívá typické Forward-Back stránkování Omezení práv aplikace (Partial Trust) Aplikace nemůže požádat o dodatečná práva (běží nebo ne) Potřebná práva pro běh aplikace jsou definována v projektu aplikace (záložka Security – Zone & Permissions) 12/30
Srovnání typů aplikací Vlastnost Lokání aplikace Browser aplikace Běhové prostředí Lokální OS IE 7 Důvěra Plná Omezená Dostupnost Online/Offline Online Nasazení Nejlépe ClickOnce nebo MSI Nejlépe ClickOnce 13/30
Instalace ClickOnce Přirozený vývoj „bezdotykové instalace“ z .NET 1.x Založeno na HTTP protokolu pro .NET aplikace exe stažen, uložen, spuštěn ClickOnce Podporuje instalaci obou typů aplikací (plné i browser) 2 scénáře nasazení Online/offline Pouze online Odstraňuje problémy předchozí verze; nyní umí Podpora v nástrojích (VS 2005, SDK) Sledování postupu instalace Distribuce jiných souborů než assembly (data, COM, nápověda) Možnost požádat o vyšší povolení Je vyžadován digitální podpis instalace 14/30
Instalace \demo demo_1_0_0_0.application demo.application Manifest nasazení publish.htm setup.exe \demo\demo_1_0_0_0 demo. exe.manifest Aplikační manifest demo. exe.deploy *.*.deploy \demo\demo_1_0_0_0 Aplikační soubory *.*.deploy – soubory učené k nasazení, rozšířeny o přípomu .deploy z důvodu ochrany web serveru *.application - manifest nasazení, XML popis nasazení a update aplikace publish.htm – web stránka ClickOnce nasazení setup.exe - .NET FX 2.0 bootstrap + další potřebné aplikaci potřebné pro běh aplikace (např. SQL Server Express), konfigurovatelné ve VS 2005 *.exe.manifest – aplikační manifest, XML popis požadované úrovně bezpečnosti, asociace souborů k dané verze 15/30
Srovnání nasazení aplikací Vlastnost Online/ offline Online ClickOnce nasazení Opravena novou verzí Zástupce ve Start menu Položka v Add/Remove programs Výzva k instalaci nové verze Roll-back na předchozí verzi 16/30
Layout Canvas StackPanel DockPanel WrapPanel Grid Organizace ve formě libovolné tabulky, nejpružnější řešení Bez logiky layoutu – rozmístí prvky přesně podle souřadnic, plná kontrola Umístí prvky horizontálně s možností „přepadnutí“ do dalšího řádku Umístí prvky horizontálně nebo vertikálně Alokuje celou boční stranu jednomu prvku 17/30
Text Layout TextBlock – nejjednodušší element Jednoduché formátování (font, styly, zarovnání) TextFlow – rozšiřuje layout možnosti TextBlock Odstavec Seznam Tabulka Floater Popis 18/30
Vlastní typ layoutu Existující layouty lze rozšířit o vlastní Proces vykreslení probíhá ve dvou fázích – měření a rozvržení public class DiagonalPanel : Panel { protected override Size MeasureOverride(Size dostupnaVelikost) { } Protected override Size ArrangeOverride(Size konecnaVelikost) {} } 19/30
Ovládací prvky Všechny standardní prvky jsou dostupné a některé nové Třídy jsou společné pro WPF System.Windows.Controls, ne System.Windows.Forms.Controls Vzhled plně oddělen od funkcionality a modifikovatelný prostřednictvím šablon Nevytvářet nové prvky, využít exitující logiku a definovat nový vzhled 20/30
Jak ovládací prvky fungují Prvky obsahují Commands – operace jako jsou Cut, Copy nebo Paste Properties – vlastnosti modifikující vzhled nebo chování Events – ovládací prvky vyvolávají události Metody – část funkcionality je dostupná formou metod Commands, Properties a Events dostupné v XAML Aplikační logika Data binding – vazba na datové zdroje Template – šablona definující vzhled prvku 21/30
Události WPF rozšiřuje standardní mechanismus .NET events Routed events Události jsou zpracovány v elementu samotném, ale i ve všech „nadřazených“ elementech (v tzv. logickém stromu) Události mohou Probublat – událost prochází od původce směrem nahoru ve stromu být Tunelovány – události začínají u kořene a sestupují směrem dolů k původci být Směrovány - zpracovává pouze původce události 22/30
Události pokr. WPF definuje většinu routed events v párech bublající-tunelovaný Tunelovaný začíná prefixem „Preview“ Tunelovaný proběhne jako první, hned za ním Bublající Bublání/tunelování lze zastavit private void btn_click (object sender, RoutedEventArg e) { e.Handled = true; } Některé události jsou pouze Směrovány, jiné pouze Probublány (příklady) B: GotMouseCapture, LostMouseCapture, … S: MouseEnter, MouseLeave T/B: PreviewMouseMove, MouseMove 23/30
Příkazy (Commands) Vznikají např. příkazy z menu nebo klávesovými zkratkami WPF využívá stejnou myšlenku jako u událostí – Routed Commands WPF definuje třídu RoutedCommand Instance asociována s každou položkou menu a toolbar tl. Po vyvolání je spuštěna dvojice událostí PreviewExecuteEvent a ExecuteEvent Jsou tunelovány a probublány jako události vstupu Cílem události je ten prvek, který má aktuálně fokus 24/30
Standardní příkazy a zpracování Standardní příkazy jsou rozděleny do několika tříd Mapování příkazu na metodu zpracování Třída CommandBinding propojí příkaz a metody Kolekce CommandBindings obsahuje tato propojení CommandBindings má každý grafický element (UIElement) Množinu existujících příkazů lze lehce rozšířit Třída Obsah ApplicationCommands Společné všem aplikacím (undo, open, close, print) ComponentCommands Pohyb po informacích (scrool, moveToEnd, selekce) EditCommands Práce s textem (bold, italic, zarovnání) MediaCommands Média operace, zvuk, stopy (play, pause) 25/30
Příklad zpracování příkazu public partial class Window1 : Window { public Window1 () { InitializeComponent(); CommandBinding cb = new CommandBinding(ApplicationCommands.New); cb.Execute += ZpracujNew; CommandBindings.Add(cb); } private void ZpracujNew(object sender, ExecuteEventArgs e) { … } } 26/30
Vyvolání příkazu Standardních prvky UI (menu, toolbar) Tzv. vstupní gesta MouseGesture – vyvolaná myší nebo stylusem KeyGesture – klávesové zkratky Přímo z kódu aplikace ApplicationCommands.New.Execute(cilovyElement); Spojením s elementem UI <Button Command="Copy">Kopírovat</Button> 27/30
Závěrem WPF nabízí nový model popisu uživatelského rozhraní Odráží potřeby profesionálního přístupu Možnost běhu aplikací v prohlížeči zvyšuje bezpečnost a údržbu Nová generace nasazení aplikací – ClickOnce Pružný layout aplikace Přepracované ovládací prvky s plným přizpůsobením vzhledu Rozšířený systém řízení a zpracování událostí a zpráv 28/30
Odkazy MSDN Windows Vista Developer Center http://msdn.microsoft.com/windowsvista Microsoft .NET Framework 3.0 http://msdn.microsoft.com/winfx/ Download platformy a ovládacích prvků http://msdn.microsoft.com/winfx/downloads/presentation/default.aspx Doporučení pro Windows Vista UX http://msdn.microsoft.com/windowsvista/experience 29/30
Konec 30/30