Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
ZveřejnilGabriela Bílková
1
Dialogová okna (1) Dialogová okna mohou být ve WPF (podobně jako ve Windows Forms) implementována jako: modální: zobrazení se provede voláním metody ShowDialog metoda ShowDialog vrací hodnotu bool?, na zákla-dě které lze určit, jak bylo dialogové okno ukončeno vrácená hodnota metodou ShowDialog je dána nasta-vením vlastnosti DialogResult (typicky v obslužné metodě reagující na stisk tlačítka OK, resp. Storno) nemodální: zobrazení se provede voláním metody Show 21/09/2018
2
Dialogová okna (2) Výměnu dat mezi dialogovým oknem a zbýva-jící částí aplikace lze realizovat pomocí: veřejných vlastností definovaných ve třídě zapou-zdřující dané dialogové okno datových vazeb (data binding) Tlačítko: OK: by mělo mít nastavenu vlastnost IsDefault na hod-notu true, aby bylo možné dialog ukončit stiskem klávesy Enter jestliže není nastavena vlastnost DialogResult na hodnotu true, tak stisk tlačítka OK automaticky ne-uzavírá dialog a je nutné provést volání metody Close 21/09/2018
3
Dialogová okna (3) Dialogové okno by: Strono:
by mělo mít nastavenu vlastnost IsCancel na hod-notu true, aby bylo možné dialog ukončit stiskem klávesy Esc je-li IsCancel nastavena na true, pak při stisku tlačítka Storno dojde automaticky k uzavření dialogu Dialogové okno by: nemělo být viditelné na liště spuštěných aplikací (taskbar) vlastnost ShowInTaskbar nastavit na hodnotu false většinou nemělo umožňovat zvětšování a zmen-šování vlastnost ResizeMode nastavit na hodnotu NoResize 21/09/2018
4
Dialogová okna (4) mělo mít nastaveného svého vlastníka (např. hlav-ní okno aplikace) pomocí vlastnosti Owner většinou mělo být centrované vzhledem ke svému vlastníku vlastnost WindowStartupLoca-tion nastavit na hodnotu CenterOwner mělo mít vhodným způsobem nastavené vstupní zaměření (lze realizovat voláním metody Focus u příslušného ovládacího prvku) 21/09/2018
5
Stromy elementů (1) Stromy elementů (element trees) uspořádávají množiny elementů do hierarchické struktury WPF rozlišuje dva typy stromů elementů: logický strom (logical tree) vizuální strom (visual tree) Logický strom: reprezentuje strukturu prvků uživatelského rozhra-ní definovaných v jazyce XAML nebo v kódu na pozadí příklad (jako rozložení je použitý StackPanel): 21/09/2018
6
Stromy elementů (2) Window StackPanel Button ListBox String String
21/09/2018
7
Stromy elementů (3) Vizuální strom:
zahrnuje všechny elementy, které jsou ve finální fázi vykresleny na zobrazovacím zařízení obsahuje všechny elementy logického stromu, kte-ré jsou odvozeny od tříd Visual a Visual3D rozděluje jednotlivé elementy na menší části, které tvoří výsledný vzhled grafického prvku využívá se například pro přizpůsobení vzhledu prvků (stylování) uživatelského rozhraní ve Visual Studiu jej lze zobrazit pomocí okna Live Visual Tree 21/09/2018
8
Stromy elementů (4) 21/09/2018
9
Závislé vlastnosti (1) Závislé vlastnosti (dependency properties) představují rozšíření možností doposud použí-vaných CLR vlastností Umožňují např.: dědičnost hodnot (property value inheritance): hodnota závislé vlastnosti může být zděděna od nadřa-zeného elementu (nejedná se o dědičnost ve smyslu OOP) např.: font použitý u tlačítka může být zděděn od hlav-ního okna (tlačítko převezme font, jenž je nastavený na úrovni hlavního okna) 21/09/2018
10
Závislé vlastnosti (2) oznámení o změně hodnoty (change notification):
lze definovat metodu, která se automaticky vyvolá v okamžiku, kdy dojde ke změně hodnoty vlastnosti dovoluje použití tzv. property triggers: umožňují při změně hodnoty provést akci bez nutnosti psát procedurální kód ověřovat platnost zapisované hodnoty (data valida-tion): dovoluje popsat metodu, která ověří platnost zapisované hodnoty provést „vynucenou“ úpravu zapisované hodnoty (value coercion): zapisovaná hodnota může být automaticky modifiková-na (upravena) tak, aby byla konzistentní s hodnotami jiných vlastností 21/09/2018
11
Závislé vlastnosti (3) datové vazby (data binding): použití stylů:
např.: zabezpečení, že horní mez rolovací lišty nebude menší než její dolní mez horní mez bude „vynuceně“ nastavena na hodnotu dolní meze datové vazby (data binding): technika umožňující nastavit propojení mezi uživatel-ským rozhraním aplikace a její aplikační logikou použití stylů: styly představují elementy definující vzhled ovládacího prvku použití šablon: elementy popisující celkovou strukturu ovládacího prvku použití animací: změny hodnoty ve specifikovaném časovém intervalu 21/09/2018
12
Závislé vlastnosti (4) Závislé vlastnosti nejsou součásti CLR, ale jsou implementovány až rozhraním WPF: nemají v jazyce C# přímou syntaktickou podporu každou závislou vlastnost je nutné v rámci WPF registrovat Třída, která chce definovat závislé vlastnosti musí být odvozena (přímo nebo nepřímo) od třídy DependecyObject Definice se provádí pomocí veřejné statické datové položky, která je: určena pouze pro čtení (modifikátor readonly) typu DependencyProperty 21/09/2018
13
Závislé vlastnosti (5) Registrace závislé vlastnosti se provádí volá-ním metody Register (třídy Dependen-cyProperty) Registraci je možné provést: v době definice datové položky ve statickém konstruktoru třídy, jež tuto vlastnost definuje V době registrace lze specifikovat: jméno (závislé vlastnosti) datový typ (pomocí klíčového slova typeof) vlastníka – třídu (pomocí typeof) metadata odkaz na funkci (callback) pro ověření platnosti 21/09/2018
14
Závislé vlastnosti (6) Metadata jsou definována pomocí instance třídy FrameworkPropertyMetadata Na úrovni metadat lze specifikovat např.: implicitní hodnotu funkci (callback), která bude vyvolána: pro úpravu hodnoty (value coercion) při změně hodnoty příznaky, které zapínají/vypínají další rysy, např.: zda při změně hodnoty má být znovu proveden proces měření, uspořádání apod. zda při změně hodnoty má dojít k překreslení dědičnost hodnot zákaz použití pro animace nebo datové vazby 21/09/2018
15
Závislé vlastnosti (7) Hodnoty závislých vlastností lze zpřístupňovat pomocí volání metody: GetValue: pro čtení SetValue: pro zápis Ke každé závislé vlastnosti bývá zvykem nap-sat obal (wrapper), který umožní s touto vlast-ností pracovat syntakticky stejně jako s vlast-ností CLR Konvence: jméno závislé vlastnosti (datové položky, jíž je re-prezentována) vždy končí slovem Property jméno obalu je až závěrečné slovo Property stejné jako u odpovídající datové položky 21/09/2018
16
Závislé vlastnosti (8) Přístup k závislým vlastnostem pomocí jazyka XAML je překládán na přímé volání metod GetValue a SetValue (nikoliv na volání přístupových metod obalu get a set) Podobně i jiné části kódu mohou k závislé vlastnosti přistupovat přímo Z toho vyplývá: přístupové metody obalu závislé vlastnosti by mě-ly používat pouze volání metod GetValue, resp. SetValue v přístupových metodách by neměla být popsána žádná další aplikační logika 21/09/2018
17
Závislé vlastnosti (9) Při čtení hodnoty závislé vlastnosti se uplatňu-je následující postup: určení základní hodnoty závislé vlastnosti: lokálně nastavená hodnota (hodnota nastavená přímo při práci s objektem v kódu na pozadí nebo v jazyce XAML) hodnota nastavená pomocí stylů a šablon (a jejich spouští – triggers) zděděná hodnota implicitní hodnota modifikace základní hodnoty: je-li základní hodnota výraz (typu Expression), tak dojde k jeho vyhodnocení (používáno při práci s dyna-mickými zdroji a datovými vazbami) 21/09/2018
18
Závislé vlastnosti (10) Poznámka:
je-li závislá vlastnost použita v souvislosti s animací, tak se aplikuje požadovaná animace dojde k vyvolání metody pro úpravu hodnoty – value coercion (je-li definována) provede se metoda pro ověření platnosti – validation (je-li definována) Poznámka: závislé vlastnosti mohou být sdíleny (tzv. shared de-pendency properties) mezi třídami i v případě, že ty-to třídy nejsou ve vztahu předchůdce-následník existující závislou vlastnost lze použít jako sdílenou voláním metody AddOwner ve statickém konstruk-toru jiné třídy, jež chce tuto vlastnost využívat 21/09/2018
19
Závislé vlastnosti (11) Jako závislé vlastnosti jsou implementovány také přidružené vlastnosti (attached properties) Definice (registrace v rámci WPF) přidružené vlastnosti se provádí pomocí volání metody RegisterAttached Přidružené vlastnosti mohou být použity u li-bovolného objektu (vytvořeného na základě třídy DependencyObject nebo jejího po-tomka) nezapisuje se k nim obal (wrapper) pomocí vlastnosti CLR 21/09/2018
20
Závislé vlastnosti (12) Místo obalu se zapisuje dvojice metod:
GetJménoVlastnosti: pro čtení hodnoty SetJménoVlastnosti: pro zápis hodnoty Tyto metody pro vlastní zpřístupnění hodnoty rovněž používají volání metod GetValue, resp. SetValue 21/09/2018
21
Směrované události (1) Směrované události (routed events) jsou rozší-řením doposud používaných .NET událostí Model směrovaných událostí je podobný mo-delu závislých vlastností: jsou implementovány až rozhraním WPF (nikoliv na úrovni CLR) mohou být definovány ve třídách odvozených ze třídy UIElement každá směrovaná událost musí být nejprve regis-trována jsou reprezentovány veřejnými statickými datový-mi položkami typu RoutedEvent určenými pou-ze pro čtení 21/09/2018
22
Směrované události (2) Rozlišují se tři typy směrovaných událostí:
přímá událost (direct event): podobná klasické události vzniká u jednoho elementu a nepostupuje k žádnému jinému elementu např. MouseEnter bublající událost (bubbling event): postupují směrem nahoru vizuálním stromem elementů např.: MouseDown: vzniká u elementu, nad nímž bylo stisknuto tlačítko myši (např. ListBox) postupuje k jeho rodičovskému elementu (např. Grid) postup pokračuje dále, dokud nedorazí ke kořenovému ele-mentu (např. Window) 21/09/2018
23
Směrované události (3) tunelující událost (tunneling event):
postup události může být ukončen nastavením vlastnosti Handled třídy RoutedEventArgs, jejíž objekt (ne-bo objekt jejího potomka) se předává obslužné metodě, na hodnotu true tunelující událost (tunneling event): postupují stromem elementů směrem dolů mívají označení začínající slovem Preview např. PreviewKeyDown umožňuje zachytit stisk klá-vesy: nejprve na úrovni okna následně na specifičtějších kontejnerech nakonec na elementu, který měl vstupní zaměření (focus) postup tunelující události může být rovněž ukončen nastavením vlastnosti Handled na hodnotu true 21/09/2018
24
Směrované události (4) Registrace směrované události se provádí:
v době definice datové položky nebo ve statickém konstruktoru třídy, jež směrovanou událost imple-mentuje pomocí metody RegisterRoutedEvent třídy EventManager V době registrace lze uvést: jméno (směrované události) typ (strategii – přímá, bublající, tunelující) delegáta definující signaturu obslužné metody (pomocí typeof) vlastníka – třídu (pomocí typeof) 21/09/2018
25
Směrované události (5) Směrované události bývají obvykle obaleny standardními .NET událostmi Tento obal (wrapper) využívá přístupové me-tody (standardní konstrukce jazyka C#): add: pomocí metody AddHandler (třídy UIElement) přidává odkaz na obslužnou metodu remove: pomocí metody RemoveHandler (UIElement) odebírá odkaz na obslužnou metodu Přístupové metody (add a remove) by nemě-ly obsahovat žádnou další aplikační logiku 21/09/2018
26
Směrované události (6) Konvence: Poznámka:
datové položky reprezentující směrované události bývá zvykem ukončovat slovem Event jméno obalu je až závěrečné slovo Event stejné jako u odpovídající datové položky Poznámka: podobně jako závislé vlastnosti mohou být i smě-rované události sdílené mezi třídami (pomocí me-tody AddOwner), popř. připojené (attached) 21/09/2018
27
Zdroje Zdroje (resources) ve WPF se dělí do dvou skupin: binární:
zdroje využívané programem, které nebyly vytvořeny zdrojovým kódem programu (např. obrázky, ikony, zvukové záznamu apod.) logické (objektové, XAML): objekty, které jsou uloženy ve slovníku a mohou být použity na různých místech programu dělí se (je možné se na ně odkazovat jako) na: statické: odkaz na ně se do vlastnosti přiřadí pouze jedenkrát (při prvním načtení ze slovníku), pokud dojde ke změně ve slovníku, tak už tato změna neovlivní hodnotu vlastnosti dynamické: změna hodnoty zdroje se promítne i do vlastnosti, jež se na ni odkazuje 21/09/2018
28
Binární zdroje (1) Neprogramové části aplikace jako jsou např.
obrázky, ikony audio záznamy video záznamy Lze je rozdělit na: zdroje, které jsou připojeny k výsledné sestavě (assembly) soubory, které zůstávají samostatně: známé v době překladu programu neznámé v době překladu (dynamicky generované) Binární zdroje se přidávají k projektu pomocí Solution Exploreru 21/09/2018
29
Binární zdroje (2) Obsahují vlastnost Built Action, kterou lze nastavit na hodnotu: Resource: zdroj bude součástí sestavy (bude k ní připojen) Content: zdroj zůstane jako samostatný soubor a v sestavě se ulo-ží pouze odkaz na něj bývá nutné ještě nastavit vlastnost Copy to Output Directory na hodnotu Copy always nebo Copy if newer Zpřístupnění binárního zdroje v jazyku XAML se provádí zápisem URI (Uniform Resource Indentifier) 21/09/2018
30
Binární zdroje (3) Příklad: <Image Source = ”Images\Image.jpg”/> <Image Source = ” <Image Source = ”MyDll;Component/Addr/Image.jpg/> Pro zpřístupnění binárních zdrojů v kódu na pozadí je nutné URI specifikovat pomocí třídy Uri Poznámka: jazyk XAML se překládá do jazyka BAML, jenž je k programu připojen jako binární zdroj 21/09/2018
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.