Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Programowanie Lokalnych Aplikacji .NET

Podobne prezentacje


Prezentacja na temat: "Programowanie Lokalnych Aplikacji .NET"— Zapis prezentacji:

1 Programowanie Lokalnych Aplikacji .NET
Architektura

2 Prymityw aplikacji WIN32 .NET

3 Architektura aplikacji win32

4 Organizacja przetwarzania komunikatów
while( GetMessage( &msg, NULL, 0, 0 ) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); } GetMessage() – pobiera komunikat z kolejki TranslateMessage() – umożliwia systemowi lub funkcjom użytkownika przekształcenie niektórych komunikatów z klawiatury DispatchMessage() – inicjuje przekazanie komunikatu jako parametru odpowiedniego wołania funkcji obsługi okna PeekMessage() – pozwala sprawdzić czy jest jakiś komunikat w kolejce

5 LRESULT CALLBACK MainWndProc( HWND hWnd, UINT msg,
LRESULT CALLBACK MainWndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) { PAINTSTRUCT ps; HDC hDC; switch( msg ) { OBSŁUGA_KOMUNIKATÓW case WM_DESTROY: PostQuitMessage( 0 ); break; default: return DefWindowProc( hWnd, msg, wParam, lParam ); } return 0; FUNKCJA OBSŁUGI OKNA

6 Komunikat Reprezentowany przez ID Dodatkowe parametry: word long
Oprócz powyższych informacji funkcja obsługi okna otrzymuje dodatkowo uchwyt okna – dlaczego ?

7 Komunikaty Rodzaje komunikatów zdarzenia I/O zdarzenia systemowe
polecenia użytkownika/prywatne komunikaty aplikacji Komunikat może być umieszczony w kolejce związanej z aplikacją dostarczony z pominięciem kolejki – bezpośrednie wywołanie funkcji obsługi okna przez system (z komunikatem jako parametrem)

8 Przykładowe komunikaty
WM_PAINT – wymusza przerysowanie obszaru roboczego (lub jego fragmentu) WM_DESTROY – zniszczenie okna zwykle kończy całą aplikację przez wysłanie WM_QUIT WM_RBUTTONDOWN – komunikat o zachowaniu (zmianie stanu) myszy WM_COMMAND – komenda systemowa. Jej typ jest określony przez dodatkowe dane wParam. WM_QUIT wysyłany przez PostQuitMessage() kończy główna pętlę zdarzeń Nieobsłużone komunikaty przekazywane są do systemu -> DefWindowProc()

9 Źródła komunikatów Kolejkowanych aplikacja PostMessage()
klawiatura np.: WM_KEYDOWN mysz np.:WM_LBUTTONDOWN zdarzenia związane z GUI np.: WM_PAINT zdarzenia systemowe np.: WM_QUIT, WM_TIMER Niekolejkowanych aplikacja SendMessage() WM_ACTIVATE, WM_SETFOCUS, and WM_SETCURSOR.

10 Okno w systemie Dualizm okien
systemowa struktura odzwierciedlająca obiekt graficzny prezentowany (lub nie) na ekranie struktura danych kontrolowana przez programistę pozwalająca wpływać na okna [DllImport("user32.dll", CharSet = CharSet.Auto)] static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);

11 CLI definicja platform wykonawczych implementowan przez
CLR – MS .NET Framework ROTOR – Shared Source CLI CF - MS .NET Compact Framework (PDA/Smartphones) MS .NET Micro Framework Core CLR, DLR (Silverlight, IronPython) Mono DotGnu Portable.NET

12 .NET – środowisko wykonawcze
CLR Obsługa wersjonowania komponentów Unifikacja modeli danych, bibliotek Definiowalny hierarchiczny system zabezpieczeń Kompatybilność z COM/COM+ Zarządzanie pamięcią, garbage colector Hierarchiczny układ funkcjonalności udostępnianiej przez system

13 .Net: rozwój .NET Framework 1.0 (VS 2002) .NET Framework 1.1 (VS 2003)

14 .NET – kod wykonywalny Kod źródłowy VB, C#, VC (?), COBOL, Native JITC
... Microsoft Intermediate Language JITC Native Code Kompilatory języków ngen.exe

15 .NET – środowisko wykonawcze
App1.exe App2.exe Dll1.dll Dll2.dll Sterta Sterta Pula watków Pula watków CLR 2.0 CLR 4.0 Natywny System Operacyjny

16 .NET – środowisko wykonawcze
Kod zarządzalny - Managed Code Common Lnguage Routine Obudowa istniejących usług Nowe usługi Win32

17 PRYMITYW APLIKACJI C# using System; using System.Drawing; ......
namespace WindowsApplication1 { public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.TextBox textBox1; public Form1() protected override void Dispose( bool disposing ) /* ... */ [STAThread] static void Main() { Application.Run(new Form1()); } } PRYMITYW APLIKACJI C#

18 Interfejs Użytkownika
WindowForms – klasy w dużej mierze obudowujące kontrolki Win32 WebForms – klasy przeznaczone dla aplikacji WEB (IIS) (wzorowane na WF) dynamicznie dostosowujące się np. do typu przeglądarki i dostępnych protokołów WPF(Silverlight) – nowa warstwa prezentacji wykorzystująca DirectX dostępna od .NET 3.0

19 .Net: Okna dialogowe Użycie okienka dialogowego:
ShowModal() - modalnie Show() – niemodalnie Automatycznie tworzone są składniki (atrybuty) zwiazane z kontrolkami systemowymi

20 .NET - lektura MSDN Hierarchia namespaces
Mapa Api -> .NET class library: sp?url=/library/en- us/dndotnet/html/win32map.asp

21

22 Narzędzia SPY++ ILDASM.EXE REFLECTOR, DotPeek UISPY R# FXCop
DEPENDENCY WALKER

23 Programowanie Lokalnych Aplikacji .NET
WPF

24 WPF alternatywa dla Window Form
Rezygnacja z koncepcji opartych na win32/16 XAML – język opisujący definicję GUI wbudowany databinding definiowany na poziomie definicji zasobów rozdzielenie wyglądu od logiki uzycie hierarchicznych stylów, separacja zachowań kontrolek od wyglądu (branding) wykorzystanie sprzętowej akceleracji (oparty na DirectX) odejscie od koncepcji interfejsu opartego o stały rozmiar pixla

25 WPF architektura

26 WPF sposoby realizacji aplikacji
Kod – tradycyjny sposób (analog. Do WindowForms). Aplikacja jest generowana przez tworzenie instancji odpowiednich klas w kodzie. Kod+skompilowany markup (BAML). – preferowane i jedyne wspierane przez VS pdejście. Szablony w XAML są kompilowane i włączane do assembly. Kod+nieskompilowany markup (XAML) – to podejście ma gdy potrzebny jest dynamiczny interfejs – XamlReader (System.Windows.Markup) pozwala wczytac i skompilowax XAML w czasie wykonania.

27 Xaml pozwala definiować obiekty i ustawiać ich właściwości
został zaprojektowny dla wygodnej pracy z WPF

28 XAML Struktura: Code behind: Zagnieżdżanie elementów:
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" > ... </Page> Code behind: <Window x:Class="WindowsApplication1.Window1" Zagnieżdżanie elementów: <Button> <Image Source="c:\windows\Blue Lace 16.bmp"/> </Button>

29 Narzędzia XAMLPAD, XAMLPAD+ VS2008, VS2010 Expression Blend

30 Pozycjonowanie elementów
Canvas: Child controls provide their own layout. DockPanel: Child controls are aligned to the edges of the panel. Grid: Child controls are positioned by rows and columns. StackPanel: Child controls are stacked either vertically or horizontally. VirtualizingStackPanel: Child controls are virtualized and arranged on a single line that is either horizontally or vertically oriented. WrapPanel: Child controls are positioned in left-to-right order and wrapped to the next line when there are more controls on the current line than space allows.

31 <DockPanel> <TextBox DockPanel.Dock="Top">Dock = "Top"</TextBox> <TextBox DockPanel.Dock="Bottom">Dock = "Bottom"</TextBox> <TextBox DockPanel.Dock="Left">Dock = "Left"</TextBox> <TextBox Background="White">This TextBox "fills" the remaining space.</TextBox> </DockPanel>

32 Kontrolki Buttons: Button and RepeatButton.
Dialog Boxes: OpenFileDialog, PrintDialog, and SaveFileDialog. Digital Ink: InkCanvas and InkPresenter. Documents: DocumentViewer, FlowDocumentPageViewer, FlowDocumentReader, FlowDocumentScrollViewer, and StickyNoteControl. Input: TextBox, RichTextBox, and PasswordBox. User Information: AccessText, Label, Popup, ProgressBar, StatusBar, TextBlock, and ToolTip.

33 Kontrolki Layout: Border, BulletDecorator, Canvas, DockPanel, Expander, Grid, GridView, GridSplitter, GroupBox, Panel, ResizeGrip, Separator, ScrollBar, ScrollViewer, StackPanel, Thumb, Viewbox, VirtualizingStackPanel, Window, and WrapPanel. Media: Image, MediaElement, and SoundPlayerAction. Menus: ContextMenu, Menu, and ToolBar. Navigation: Frame, Hyperlink, Page, NavigationWindow, and TabControl. Selection: CheckBox, ComboBox, ListBox, TreeView, and RadioButton, Slider.

34 WPF kontrolki WPF 4 – Calendar, DataPicker
kontrolki można zagnieżdzać: ListBoxItem, ComboBoxItem mogą zawierać niemal dowolne elementy możliwe jest zdefinowanie wyglądu danych – (dataTemplates)

35 Data Binding

36 Binding Możliwy jest binding do kontrolek, xmla, obiektów, elementów spoza okna Dzieki bindingowi możliwa jest budowa bardzo cienkiego UI – cały kod definiujący wygląd jest w takim wypadku wyniesiony z kontrolera/prezentera co b. dobrze współgra z Testami Jednostkowymi

37 Definiowanie Bindingu
Definicja programowa: Binding myBinding = new Binding("MyDataProperty"); myBinding.Source = myDataObject; myText.SetBinding(TextBlock.TextProperty, myBinding);

38 WPF binding - elementy Source - domyślnie wskazuje na DataContekst (może być odziedziczone po poprzedniku). po ustawieniu source na wrtość != null operacje bindingu traktują s. jako miejsce z ktorego pobierać/w którym skladać dane. Path – pozwala określić property obiektu źródłowego (typu PropertyPath). ElementName – może być użyte jako alternatywna nazwa dla Source – pozwala określić nazwę elementu używanego jako źródło danych. Converter – (typu IValueConverter) – może zostać zainicjowane instancją obiektu konwerującego dane.

39 Definiowanie Bindingu Xaml-1
<TextBox Text = "{Binding Source=Application.Current, Path=myAppProperty}" /> Lub <TextBox> <TextBox.Text> <Binding Source="Application.Current” Path=" myAppProperty" /> </TextBox.Text> </TextBox> Element name odnosi sie do wlasciwosci Name="ControlABC„ Binding do wlasciwosci Pusty binding oznacza bindindg do odziedziczonego elementu Statyczne zasoby moga zawierac rozne elementy w tym rowniez zrodla w bindingu to o Dziedziczonego bindingu/zdefiniowanego w zasobach mozna dodawac path

40 Definiowanie Bindingu Xaml-2
< TextBox Text = "{Binding ElementName=ControlABC, Path=ColorName}" /> <ListBox ItemsSource="{Binding Source= {StaticResource myDataSource}}” <StackPanel DataContext= {StaticResource myDataSource}}" <ListBox ItemsSource="{Binding}" /> <TextBox Text="{Binding Path=/Name}" /> </StackPanel> Element name odnosi sie do wlasciwosci Name="ControlABC„ Binding do wlasciwosci Pusty binding oznacza bindindg do odziedziczonego elementu Statyczne zasoby moga zawierac rozne elementy w tym rowniez zrodla w bindingu to o Dziedziczonego bindingu/zdefiniowanego w zasobach mozna dodawac path

41 Definiowanie Zasobów </DataTemplate> <Window.Resources>
<CollectionViewSource Source="{Binding Source={x:Static Application.Current}, Path=Games}" x:Key=" myDataSource" /> <DataTemplate x:Key="myDateTemplate"> <TextBlock Text="{Binding Path=Title}“ Foreground="Navy" FontWeight="Bold" FontSize="12"/> </DataTemplate> </Window.Resources> źródło X:Key nzawa elementu Current zwraca biezacy obiekt App:Application Statyczne zasoby moga zawierac rozne elementy w tym rowniez zrodla w bindingu to o szablon

42 Szablon Pozwala określić sposób wyświetlania obiektu
Szablon to foremka do produkcji zestawów kontrolek zbindowanych do danych Szablon moze byc Aplikowany do konkretnej kontrolki Domyslny dla typu danych <ListBox ItemsSource="{Binding Source= {StaticResource myDataSource}}" ItemTemplate="{StaticResource myDateTemplate}" /> X:Key nzawa elementu Current zwraca biezacy obiekt App:Application Statyczne zasoby moga zawierac rozne elementy w tym rowniez zrodla w bindingu to o

43 brak Data template namespace WPF_Test { public class River
public string Name { get; set; } public int MilesLong { get; set; } } <StackPanel> <StackPanel.Resources> <local:River x:Key="theRiver" Name="Colorado River" MilesLong="1450"/> </StackPanel.Resources> <ContentControl Content="{StaticResource theRiver }" /> </StackPanel>

44 zdefiniowany Data template
<DataTemplate DataType="{x:Type local:River}"> <Border BorderBrush="Blue" BorderThickness="3" CornerRadius="12"> <Grid Margin="4"> <TextBlock> <Run Text="The"/> <TextBlock Text="{Binding Name}"/> <Run Text="is"/> <TextBlock Text="{Binding MilesLong}" /> <Run Text="miles long." /> </TextBlock> </Grid> </Border> </DataTemplate>

45 WPF Dependancy properties
Jeżeli obiekt nie ma zdefiniowanej dziedziczonej właściwości – wtedy używana jest wartość z elementu nadrzędnego (rodzica w drzewie). Uwaga! drzewo oznacza drzewo obiektów (np. kontrolek) a nie klas - analogicznie do ambient properties w Window Forms Można je ustawiać z poziomu XAML (jak zwykłe p.)

46 WPF Data context elementy w WPF mają właściwość DataContext
jeżeli zostanie ona ustawiona na jakiś obiekt wszystkie elementy pochodne (dzieci w drzewie obiektów) przejmują (dziedziczą) tą wartość chyba, że explicite określimy inaczej Można w ten sposób określić binding dla całego drzewa obiektów

47 Binding - źródla danych
obiekty CLR obiekty użytkownika kolekcje XML ADO Nie można bindować do pól (do właściwości jak najbardziej)

48 Przepływ danych w Bindingu
OneWay TwoWay OneWayToSource

49 Wyzwalanie aktualizacji w Bindingu

50 Binding - konwersje "{Binding Path=TheDate, Converter={StaticResource MyConverterReference}}"

51 WPF binding - konwertery
public class DoubleToIntegerConverter : IValueConverter { public object Convert( object value, Type targetType, object parameter, CultureInfo culture ) { return (int)(double)value; } public object ConvertBack( object value, Type targetType, object parameter, CultureInfo culture ) { throw new NotSupportedException( "Cannot convert back" ); } }

52 WPF binding – konwertery wielowartościowe
public class SumatorConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture ) int s1 = (int)values[1]; int s2 = (int)values[2]; return s1+s2; } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture ) { throw new NotSupportedException( "Cannot convert back" );

53 WPF binding – konwertery wielowartościowe
<Rectangle.Width> <MultiBinding Converter="{StaticResource SumatorConverter }"> <Binding ElementName= "man" Path= "Incomes" /> <Binding ElementName= "woman" Path= "Incomes" /> </MultiBinding> </Rectangle.Width>

54 Binding – walidacja Przebieg bindingu
Uruchamiane są (jeżeli są) indywidualne reguły walidacji (do pierwszego błędu) dla wartości pierwotnych (ValidationStep ustawiony na RawProposedValue) Uruchamiany jest konwerter (jeżeli istnieje), ew. błedy (wyjątki) przerywają proces Uruchamiane są (jeżeli są) indywidualne reguły walidacji (do pierwszego błędu) dla wartości wynikowych (ValidationStep ustawiony na ConvertedProposedValue) Ustawiana jest wartość wynikowa Uruchamiane są (jeżeli są) indywidualne reguły walidacji (do pierwszego błędu) dla wartości zaktualizowanych (ValidationStep ustawiony na UpdatedValue lub CommittedValue) Ew. błąd jest dodawany do kolekcji Validation.Errors skojarzonej z elementem (jest ona czyszczona przed p. 1).

55 Binding – dignostyka PresentationTraceSources.SetTraceLevel Lub
<TextBox> <TextBox.Text> <Binding Source="{StaticResource myDataSource}" Path="PersonName" diag:PresentationTraceSources.TraceLevel="High"/> </TextBox.Text> </TextBox>

56 Użycie konwertera do inicjacji debugowania
public class DatabindingDebugConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { Debugger.Break(); return value; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {

57 Formatowanie ? Dla potrzeb formatowania danych w szablonie można wykorzystać konweretery Przykład jak spowodować żeby wartość bool była wyświetlana jako tak/nie Podejście pierwsze: specjalizowany konwerter <DataTemplate x:Key="myDetailTemplate"> ... <TextBlock Text="{Binding Path=IsAvailiable, Converter={StaticResource boolYNConverter}}"/> </DataTemplate>

58 Formatowanie vs konwersja?
[ValueConversion(typeof(bool), typeof(String))] public class BoolYesNoConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return (bool)value ? "yes" : "no"; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) return null;

59 Formatowanie ? Podejście drugie – specjalizowany binding
<DataTemplate x:Key="myDetailTemplate"> ... <TextBlock Text="{src:BoolBindingExtension Status.WantToPlay, Yes, No }"/> </DataTemplate>

60 public class BoolBindingExtension : Binding
{ public BoolBindingExtension() { Initialize(); } public BoolBindingExtension(string path) : base(path) { Initialize(); } public BoolBindingExtension(string path, object valueIfTrue, object valueIfFalse) : base(path) Initialize(); ValueIfTrue = valueIfTrue; ValueIfFalse = valueIfFalse; } private void Initialize() ValueIfTrue = DoNothing; ValueIfFalse = DoNothing; Converter = new BoolConverter(this); [ConstructorArgument("valueIfTrue")] public object ValueIfTrue { get; set; } [ConstructorArgument("valueIfFalse")] public object ValueIfFalse { get; set; } private class BoolConverter : IValueConverter {...}

61 private class BoolConverter : IValueConverter
{ public BoolConverter(BoolBindingExtension boolExtension) { _bool = boolExtension; } private BoolBindingExtension _bool; public object Convert(object value, Type targetType, object parameter, CultureInfo culture) try bool b = System.Convert.ToBoolean(value); return b ? _bool.ValueIfTrue : _bool.ValueIfFalse; } catch return DependencyProperty.UnsetValue; public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) return DoNothing;

62 Podejście trzecie : biblioteka Kent.Boogaart.Converters
<TextBlock> <TextBlock.Text> <Binding Path="Status.WantToPlay"> <Binding.Converter> <con:MapConverter> <con:Mapping To="YES" > <con:Mapping.From> <System:Boolean>True</System:Boolean> </con:Mapping.From> </con:Mapping> <con:Mapping To="NO" > <System:Boolean>False</System:Boolean> </con:MapConverter> </Binding.Converter> </Binding> </TextBlock.Text> </TextBlock> Podejście trzecie : biblioteka Kent.Boogaart.Converters

63 Style <Style TargetType="{x:Type Button}"> <Setter Property="Background" Value="Yellow" /> </Style> definicja xaml programowa w kodzie

64 Triggery trigger jest odpowiednikiem "if" – w kodzie proceduralnym
<Trigger SourceName="bdr" Property="IsMouseOver" Value="True"> <Setter TargetName="bdr" Property="Background" Value="LightGray"/> <Setter TargetName="txt" Property="Foreground" Value="Red"/> </Trigger> trigger oparty na wielu wartościach <MultiDataTrigger.Conditions> <Condition Binding="{Binding IsFinished}" Value="True" /> <Condition Binding="{Binding IsWinner}" Value="False" /> </MultiDataTrigger.Conditions> , Path=""

65 Kolekcje vs. Binding Źródło odpowiada nie tylko za listę elementów ale równiez za wskaźnik bieżącego elementu (Path=/), na źródło mozna nakładac filtry, grupować elementy, sortować Scenariusz: master – detail Dla obiektów Ado aby sortowanie dlegowac do obiektu ado trzeba stosować kolekcji mozliwe obiekty CLR obiekty użytkownika kolekcje XML ADO

66 WPF Animacje Polega na zmianie wskazanej właściwości okreslonego obiektu w zadanym rytmie Typy animacji: from/to/by: ColorAnimation, DoubleAnimation, PointAnimation key-frames: ColorAnimationUsingKeyFrames, DoubleAnimationUsingKeyFrames, PointAnimationUsingKeyFrames, StringAnimationUsingKeyFrames path: DoubleAnimationUsingPath, PointAnimationUsingPath

67 WPF Geometria 2d/3d Viewport3D Współrzedne przestrzeni 3D

68 WPF elementy sceny kamery, modele, siatki, materiały

69 WPF Konstrukcja sceny <Viewport3D > <Viewport3D.Camera>
<PerspectiveCamera Position="-3,1,8" LookDirection="3,-1,-8" UpDirection="0,1,0" FieldOfView="45" NearPlaneDistance="0.15" /> </Viewport3D.Camera> <ModelVisual3D> <ModelVisual3D.Content> <Model3DGroup > </Model3DGroup > </ModelVisual3D.Content> </ModelVisual3D> </Viewport3D >

70 WPF Grupa 3D <GeometryModel3D> <GeometryModel3D.Geometry>
<MeshGeometry3D Positions="0,1,0 1,-1,1 -1,-1,1 1,-1,1 -1,-1,-1" Normals="0,1,0 -1,0,1 1,0,1 -1,0,-1 1,0,-1" TriangleIndices="0,2,1 0,3,1 0,3,4 0,2,4" /> </GeometryModel3D.Geometry> <GeometryModel3D.Material> <DiffuseMaterial Brush="Aqua" /> </GeometryModel3D.Material> </GeometryModel3D>

71 WPF Swiatła <Model3DGroup> <Model3DGroup.Children>
<AmbientLight Color="#ffcccccc"/> <DirectionalLight Color="LightGray" Direction="-1,-1,-1" /> </Model3DGroup.Children> </Model3DGroup>

72 WPF światła AmbientLight – światło otoczenia. Jego jedynym parametrem jest Color. DirectionalLight – światło kierunkowe. Posiada kolor oraz kierunek określony parametrem Direction, w jakim padają jego promienie. PointLight – światło punktowe. Parametry Position, Range(dł. fali), zmiana intensywności - (ConstantAttenuation,LinearAttenuation, QuadraticAttenuation). SpotLight – światło punktowo-kierunkowe. Parametry stożka: Position, Direction, InnerConeAngle,OuterConeAngle + wł. dla PointLight

73 WPF elementy sceny perspektywa – rzecz kamery 

74 WPF Materiały DiffuseMaterial – materiał rozpraszający
SpecularMaterial – materiał odblaskowy EmmisiveMaterial – materiał emisyjny tekstury

75 Linki WPF 3DPanel: Przykład – panel3d Josh Smith WPF vs grafika, animacje:

76 WPF input events ... zdefiniowane jako pary są implementowane tak że pojedyncza akcja np. kliknięcie myszą wywołuje dwa po sobie nastepujące zdarzenia tunneling bubble Oba zdarzenia współdzielą dokładnie tą samą instancję danych opisujących zdarzenie. Stąd zdarzenie może zostać obsłużone nie przez element, w którym miało miejsce

77 WPF routed events Bubbling: wołany jest event handler w el. źródłowym a potem kolejno w rodzicach. Direct: Tylko żródłowy element woła handler Tunneling: handlery wołane są od roota do źródła PreviewMouseDown (tunnel) on root element. PreviewMouseDown (tunnel) on intermediate element #1. PreviewMouseDown (tunnel) on source element #2. MouseDown (bubble) on source element #2. MouseDown (bubble) on intermediate element #1. MouseDown (bubble) on root element.

78 WPF handler zdarzenia Zwykły handler zdefiniowany w elemencie
<Button Name="myButton" Click="myButton_Click"> Test Button </Button> Handler zdefinowany na zewnatrz elementu (attached event) <Grid Button.Click="myButton_Click"> <Button Name="myButton" >Click Me</Button> </Grid>

79 WPF obsługa zdarzenia Obsłużenie zdarzenia
private void OnMyElementMouseDown(object sender, MouseButtonEventArgs e) { e.Handled = true; } Handler wołany zawsze (nawet dla z. obsłużonych) m_myElement.AddHandler(UIElement.MouseDownEvent, (RoutedEventHandler)OnMouseDownMyHandler,true);

80 Routed + Command = RoutedCommand
WPF RoutedCommand Routed + Command = RoutedCommand Routted command vs „klasyczna” obsługa możliwość uruchamiania zdarzenia przez wiele źródeł (bez definiowania h. w kodzie) blokowanie wszystkich źródeł jednocześnie i automatycznie (->CommandManager) mozliwość oddzielenie kodu od samej formy (MVC)

81 WPF definiowanie komendy
<Button Command="Save">Save</Button> <Button Command="Save" CommandTarget="{Binding ElementName=uc1}" Width="75" Height="25">Save</Button>

82 Renderowanie Layoutu Drzewo logiczne vs. Drzewo widoków Wymiarowanie
2 fazy: Measure i Align HorizontalAlignment = Left, ...,Stretch Grid.Row,Grid.RowSpan Width, ActualWidth RowDefinition Height= "Auto", "*", "1“

83 Dane dla designera xmlns:d="http://schemas.microsoft.com/expression/blend/2008" ... public MyData { get { return new Person() { Name = "Harry" }; } } d:DataContext="{Binding RelativeSource= {RelativeSource Self}, Path=MyData}"

84 WPF Dokumenty DocumentViewer
FlowDocumentReader, FlowDocumentPageViewer, FlowDocumentScrollViewer XML Paper Specification (XPS) Więcej tu

85 WPF Typografia Skalowanie (urzadzenia mobilne) Wykorzystanie ClearType
Duże usprawnienia w wersji 4.0 Więcej tu

86 WPF vs WinForms

87 WPF wielowątkowość wydzielony wątek do renderowania formy
Dostęp z innego wątku Window1 win = (Window1) state; for (int i = 0; i < 100; i++) { win.Dispatcher.Invoke(new Action<ProgressBar, int>( (p, v) => p.Value = v), win.progress1, i); }

88 WPF - źródła http://joshsmithonwpf.wordpress.com/a-guided-tour-of-wpf/
Ksiązki: “WPF 4 Unleashed”, Adam Nathan “Advanced MVVM”, Josh Smith


Pobierz ppt "Programowanie Lokalnych Aplikacji .NET"

Podobne prezentacje


Reklamy Google