vjj 1. events, triggers.net

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

Animation vjj 1

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

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

UJO Framework. revoluční architektura beans. verze

Brush vjj 1

Reaktivní programování v.net

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

Jazyk C# (seminář 3)

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

Microsoft Silverlight 2.0

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

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

Rozhraní SAX, SAX vs. SAX2. Jaroslav Ciml

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.

Windows Presentation Foundation & Data Binding

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

Tematický celek 03 - Cvičné příklady

Tvorba internetových aplikací pomocí technologie Microsoft Silverlight

Tvorba informačních systémů

IRAE 07/08 Přednáška č. 1

Tvorba informačních systémů

WPF Desktopové aplikace

Tvorba informačních systémů

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám.

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

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

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

PB161 Programování v jazyce C++ Přednáška 4

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

Infrastruktura UML. Modelování struktury v UML. Superstruktura UML. Notace objektů. Diagramy objektů

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

Java a XML. 10/26/09 1/7 Java a XML

Jazyk C++ II. Šablony a implementace

Parametrizované třídy Generics generické třídy. JDK zavádí mimo jiné tzv. parametrizované třídy - generics

Nejzajímavější jsou události MouseDown a KeyDown.

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

Programování v jazyce JavaScript

Komponenty v.net. Obsah přednášky

NSWI096 - INTERNET JavaScript

25. listopadu 2014, Brno Připravil: David Procházka. Qt a QML. Programovací jazyk C++

Rozhraní pro práci s XML dokumenty. Roman Malo

IRAE 07/08 Přednáška č. 7. Začátek (head)

Cvičné příklady Hodina 2

Přednáška. Vstup/Výstup. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Code Contracts. Robert Haken [MVP ASP.NET, MCT] Software architect, Owner at HAVIT, s.r.o. knowledge-base.havit.cz

Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Michal Podzimek

ANT. Aplikační programování v Javě (BI-APJ) - 1 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

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

1. Programování proti rozhraní

Objektově orientované programování v jazyce Python

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

Osnova přednášky. Programové prostředky řízení Úvod do C# II. Přístup ke členům. Členy (Members)

PŘETĚŽOVÁNÍ OPERÁTORŮ

Připravil: David Procházka. Programovací jazyk C++

2N Helios IP HTTP API

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

PB161 Programování v jazyce C++ Přednáška 8

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

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

Sada 1 - PHP. 03. Proměnné, konstanty

Programátorské večery. Tomáš Herceg Microsoft Student Partner

Objektově orientované programování v jazyce Python

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

VISUAL BASIC. Přehled témat

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

CineStar Černý Most Praha

Webová služba. Popis. Dostupné operace. add_subscriber_groups

Multiple Event Support

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

Další vlastnosti Springu Moduly Springu. Spring Framework. Pavel Mička. Pavel Mička Spring Framework 1/18

GUI grafických aplikací GUI pro Othello

Jazyk C++ I. Šablony 2

Maturitní otázky z předmětu PROGRAMOVÁNÍ

PROGRAMOVÁNÍ PRO MS WINDOWS 1

úvod vjj 1

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

Obsah SLEDOVÁNÍ PRÁCE... 4

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

Java Výjimky Java, zimní semestr

2 PŘÍKLAD IMPORTU ZATÍŽENÍ Z XML

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

Z. Kotala, P. Toman: Java ( Obsah )

JAVA JavaBeans Java, letní semestr

První kapitola úvod do problematiky

10. března 2015, Brno Připravil: David Procházka. Programovací jazyk C++

TÉMATICKÝ OKRUH Softwarové inženýrství

IoC/DI. Tomáš Herceg Microsoft MVP (ASP.NET)

GUI. Systémová integrace pro desktopové aplikace

Jakub Čermák Microsoft Student Partner

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

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

Sdílení dat mezi podprogramy

(X)HTML, CSS a jquery

24. listopadu 2013, Brno Připravil: David Procházka

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

(c) Miroslav Balík, Ondřej Kroupa, Martin Pelant 11/29/ přednáška. Android projekt. Manifest. Activity. Uživatelské rozhraní (základy)

Java aplety. Předávání parametrů z HTML

Transkript:

13.12.18 vjj 1 events, triggers.net

13.12.18 vjj 4 Triggers Umožňují definovat reakci na vzniklou situaci Event Trigger invoked when a RoutedEvent is raised " <EventTrigger " Property Trigger invoked when the value of a dependency property changes " <Trigger " Data Trigger invoked when the value of a plain.net property changes

Event Triggers 13.12.18 vjj 5

13.12.18 vjj 6 zprávy ve frontě Win32 API můj program GetMessage DispatchMessage -> WndClass.WndProc WndProc (id instance okna, msg) switch case

Win32 API okno okno okno okno Win32 API program case case case case case WinProc WinProc WinProc DispatchMessage GetMessage fronta WM_ zpráv 13.12.2018 vjj 7

13.12.18 vjj 8 zprávy ve frontě objektové nadstavby runtime (Win32 aplikace) GetMessage DispatchMessage -> WndClass.WndProc WndProc (id instance okna, msg) switch case můj program event handler (pro který objekt?)

objektový program okno okno okno okno moje objekty event handler event handler event handler event handler Win32 API stub case case case case case WinProc WinProc WinProc DispatchMessage GetMessage fronta WM_ zpráv 13.12.2018 vjj 9

13.12.2018 vjj 10 přesměrování jak zpracovat zprávu/událost jinde? standardní ovládací prvky implementované ve standardní knihovně reakci chci mít spojenou s oknem, ve kterém jsou ovládací prvky umístěny runtime -> event handler objektu, kterého se událost týká

13.12.18 vjj 11 Win32 API Controls child okna, pokud explicitně neupozorní rodičovské okno, to se o události nic nedozví standardní ovládací prvky > standardní komunikace (posílají zprávy WM_COMMAND nebo WM_NOTIFY rodičovskému oknu)

13.12.2018 vjj 12 standardní objektové nadstavby standardní ovládací prvky pokud neobsahují příslušný event handler pokud obsahují příslušný event handler

.NET WPF program okno okno okno moje objekty event handler event handler event handler Win32 API stub case case case case case WinProc WinProc DispatchMessage GetMessage fronta WM_ zpráv 13.12.2018 vjj 13

13.12.2018 vjj 14.NET pro každou událost volá runtime v pevně daném pořadí handlery této události zaregistrované i u jiných objektů, než je ten, pro který byla událost vyvolána

13.12.2018 vjj 15.NET objekt může mít zaregistrovaný Event handler i pro jiný typ objektu, než je jeho vlastní pro některé události je možné zaregistrovat dokonce dva handlery najednou Type.PreviewEventName Type.EventName

13.12.2018 vjj 16.NET runtime strom objektů + zaregistrované handlery cesta od kořene k objektu, kterého se událost týká všechny event handlery odshora dolu - tunelování jen event handler objektu, kterého se událost týká - direct všechny event handlery odspodu nahoru - probublávání

13.12.18 vjj 21 Routing Strategies DIRECT.NET runtime zavolá Event Handler pouze toho ovládacího prvku, pro který událost nastala Click, MouseEnter TUNNELING.NET runtime postupně volá Preview Event Handler této události pro všechny nadřazené objekty od kořene vizuálního stromu až k objektu, kde událost nastala PreviewMouseDown BUBBLING.NET runtime postupně volá standardní Event Handler této události stejných objektů jako u tunelování, ale v opačném pořadí MouseDown

13.12.2018 vjj 22.NET tunneling - pro standardní systémovou reakci bubbling - pro speciální reakci aplikace v dokumentaci jsou uvedeny handlery a preview handlery nezávisle na sobě, takže pro zjištění, jakou strategii volání handlerů pro událost runtime používá, je nutné zkontrolovat výskyt popisu obou těchto handlerů

13.12.18 vjj 24 Direct Events klasika je volán Event handler pouze pro ovládací prvek, pro který byla událost vyvolána pokud ten nemá pro tuto událost zaregistrován žádný handler, je událost ignorována

13.12.18 vjj 25 Direct Events MouseEnter MouseLeave Click Button CheckBox RadioButton

13.12.2018 vjj 26 problém sample: Button - Grid - TextBox - MouseEnter sample - Direct událost, která není Direct?!

13.12.18 vjj 27 Attached Events Mouse.MouseEnter Mouse.MouseLeave Mouse.MouseLeftButtonDown Mouse.MouseLeftButtonUp Mouse.MouseRightButtonDown Mouse.MouseRightButtonUp Mouse.MouseDoubleClick Mouse.MouseMove Mouse.MouseWheel Click Button CheckBox RadioButton

13.12.18 vjj 28 tunneling PreviewMouseLeftButtonDown PreviewMouseLeftButtonUp PreviewMouseRightButtonDown PreviewMouseRightButtonUp PreviewMouseDoubleClick PreviewMouseMove PreviewMouseWheel PreviewGotKeyboardFocus PreviewLostKeyboardFocus PreviewKeyDown PreviewKeyUp PreviewTextInput bubbling MouseDown GotKeyboardFocus LostKeyboardFocus KeyDown KeyUp TextInput

13.12.18 vjj 29 tunneling preview handlery jsou volány odshora dolů, tj. handler elementu, který událost vyvolal, je volán jako poslední umožňuje umístění společného handleru pro všechny ovládací prvky do kontejneru, který je obsahuje, a upřednostnit tento globální handler před lokálními protože událost může být vyvolána některým z "child" elementů, je vhodné zkontrolovat "Source" v datech události

13.12.18 vjj 30 bubling bublání následuje po skončení tunelování postupně jsou volány všechny handlery od elementu, pro který byla událost vyvolána, až do kořene stromu objektů uživatelského rozhraní protože událost může být vyvolána některým z "child" elementů, je vhodné zkontrolovat "Source" v datech události

13.12.18 vjj 31 GotMouseCapture LostMouseCapture bubling only QueryCursor

13.12.18 vjj 32 event handled posloupnost tunelování a následného bublání lze kdykoliv ukončit private void mycontainerhandler (object sender, RoutedEventArgs e) {... e.handled = true ;... }

13.12.18 vjj 35 XAML + C# <Button Name="btnHello" Content="AAAAA" Click="btnHello_Clicked"> </Button> void btnhello_clicked (object sender, RoutedEventArgs e) { btnhello.content = "BBBBB"; btnhello.background = new SolidColorBrush(Colors.GreenYellow); }

13.12.18 vjj 36 XAML: EventTrigger Event -> code behind <Button MouseEnter="myEventHandler"... /> Event -> XAML EventTrigger -> actions <Button... /> <Button.Triggers> <EventTrigger RoutedEvent="Button.MouseEnter"> Actions

13.12.18 vjj 37 XAML: Actions <Button Content="Click" Height="30" Width="100" Margin="10"> <Button.Triggers> <EventTrigger RoutedEvent="Button.Click"> <EventTrigger.Actions> <BeginStoryboard... />... </EventTrigger.Actions> </EventTrigger> </Button.Triggers> </Button>

13.12.18 vjj 38 triggered actions může být příkaz BeginStoryboard StopStoryboard PauseStoryboard ResumeStoryboard nebo kombinace takových příkazů možné hodnoty parametru Storyboard vnořená definice scénáře animací odkaz na definici scénáře animací jinde, např. v resources odkaz na odstartovaný scénář animací

13.12.18 vjj 39 XAML: BeginStoryboard <Button Content="Click" Height="30" Width="100" Margin="10"> <Button.Triggers> <EventTrigger RoutedEvent="Button.Click"> <BeginStoryboard... /> </EventTrigger> </Button.Triggers> </Button>

13.12.18 vjj 40 XAML: BeginStoryboard <Button Content="Click" Height="30" Width="100" Margin="10"> <Button.Triggers> <EventTrigger RoutedEvent="Button.Click"> <BeginStoryboard> <Storyboard> <DoubleAnimation To="150" Duration="0:0:2" AutoReverse="True" Storyboard.TargetProperty="(Button.Width)" /> </Storyboard> </BeginStoryboard> </EventTrigger> </Button.Triggers> </Button>

Property Triggers 13.12.2018 vjj 41

13.12.18 vjj 42 Property Triggers system watches for dependency property to have a certain value system watches for property trigger to become inactive and reverts property to the previous value Možné reakce jsou Setter - Nastavení hodnoty libovolné vlastnosti EnterActions ExitActions Property Trigger lze psát pouze jako součást definice stylu

13.12.18 vjj 43 Property Trigger <Trigger Property="..." Value="..."> <Setter Property="..." Value="..." /> <Setter Property="..." Value="..." /> <Setter Property="..." Value="..." /> </Trigger>

13.12.18 vjj 44 XAML - IsMouseOver - syntax error <Button Content="hover over" Height="30" Width="200" Margin="10"> <Button.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="FontWeight" Value="Bold" /> </Trigger> </Button.Triggers> </Button>

13.12.18 vjj 45 Property Trigger in Style <Page.Resources> <Style TargetType="Button">... Control"> <Style.Triggers> <Trigger Property="Button.IsMouseOver" Value="True"> <Setter Property="Button.FontWeight" Value="Bold" /> </Trigger> </Style.Triggers> </Style> </Page.Resources>

13.12.18 vjj 46 multiple properties <Style TargetType="Button"> <Style.Triggers> <Trigger Property="Button.IsMouseOver" Value="True"> <Setter Property="FontWeight" Value="Bold"/> <Setter Property="FontSize" Value="28"/> <Setter Property="Cursor Value="Hand"/> </Trigger> </Style.Triggers> </Style>

13.12.18 vjj 47 multiple triggers <Style TargetType="Button"> <Style.Triggers> <Trigger Property="Button.IsPressed" Value="True"> <Setter Property="Foreground" Value="Red"/> </Trigger> <Trigger Property="Button.IsMouseOver" Value="True"> <Setter Property="FontWeight" Value="Bold"/> <Setter Property="FontSize" Value="28pt"/> </Trigger> </Style.Triggers> </Style>

13.12.18 vjj 48 <Style TargetType="Button"> <Style.Triggers> <MultiTrigger> MultiTriggers <MultiTrigger.Conditions> <Condition Property="Button.IsMouseOver" Value="True"/> <Condition Property="Button.Content" Value="HELLO"/> </MultiTrigger.Conditions> <Setter Property="Foreground" Value="Red"/> <Setter Property="FontSize" Value="28pt"/> <Setter Property="FontWeight" Value="Bold"/> </MultiTrigger> </Style.Triggers> </Style>

13.12.18 vjj 49 EventTriggers + PropertyTrigger <Style TargetType="Button"> <Style.Triggers> <EventTrigger RoutedEvent="Button.MouseEnter"> <BeginStoryboard Name="ABCD" > <Storyboard... </EventTrigger> <EventTrigger RoutedEvent="Button.MouseLeave"> <StopStoryboard BeginStoryboardName="ABCD" > </EventTrigger> <Trigger Property="Button.IsMouseOver" Value="True"> <Setter Property="FontWeight" Value="Bold"/> </Trigger> </Style.Triggers> </Style>

13.12.18 vjj 50 Property Trigger w/events <Style TargetType="Button"> <Style.Triggers> <Trigger Property="Button.IsMouseOver" Value="True"> <Setter Property="FontWeight" Value="Bold"/> <Trigger.EnterActions> <BeginStoryboard Name="ABCD"> <Storyboard.... </Trigger.EnterActions> <Trigger.ExitActions> <StopStoryboard BeginStoryboardName="ABCD" /> </Trigger.ExitActions> </Trigger> </Style.Triggers> </Style>

prostředí code behind XAML důvod event změna hodnoty atributu způsob reakce přehled animace změna atributu handler ANO ANO Routed Event Trigger Property Trigger ANO NE EnterActions ANO ExitActions ANO NE animation ANO ANO Setter implicitní návrat k původní hodnotě NE AutoReverse ANO NE AutoReverse ANO ANO 13.12.18 vjj 51

13.12.2018 vjj 52 DataTrigger <TextBox Margin="10" Text="White" FontSize="42"> <TextBox.Style> <Style TargetType="{x:Type TextBox}"> <Setter Property="Background" Value="{Binding RelativeSource={RelativeSource Self}, Path=Text}" /> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Text}" Value="disabled" > <Setter Property="IsEnabled" Value="False" /> </DataTrigger> </Style.Triggers> </Style> </TextBox.Style> </TextBox>