Programowanie Lokalnych Aplikacji .NET - PowerPoint PPT Presentation

1 / 88
About This Presentation
Title:

Programowanie Lokalnych Aplikacji .NET

Description:

Programowanie Lokalnych Aplikacji .NET Architektura * * * * * * * * * * * * * * * * * * Element name odnosi sie do wlasciwosci Name= – PowerPoint PPT presentation

Number of Views:309
Avg rating:3.0/5.0
Slides: 89
Provided by: pgGdaPlm
Category:

less

Transcript and Presenter's Notes

Title: Programowanie Lokalnych Aplikacji .NET


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() umozliwia systemowi lub
    funkcjom uzytkownika przeksztalcenie niektórych
    komunikatów z klawiatury
  • DispatchMessage() inicjuje przekazanie
    komunikatu jako parametru odpowiedniego wolania
    funkcji obslugi okna
  • PeekMessage() pozwala sprawdzic czy jest jakis
    komunikat w kolejce

5
FUNKCJA OBSLUGI OKNA
LRESULT CALLBACK MainWndProc( HWND hWnd, UINT
msg, WPARAM wParam, LPARAM lParam )
PAINTSTRUCT ps HDC hDC switch( msg )
OBSLUGA_KOMUNIKATÓW case
WM_DESTROY PostQuitMessage( 0
) break default return DefWindowProc( hWnd,
msg, wParam, lParam ) return 0
6
Komunikat
  • Reprezentowany przez
  • ID
  • Dodatkowe parametry
  • word
  • long
  • Oprócz powyzszych informacji funkcja obslugi okna
    otrzymuje dodatkowo uchwyt okna dlaczego ?

7
Komunikaty
  • Rodzaje komunikatów
  • zdarzenia I/O
  • zdarzenia systemowe
  • polecenia uzytkownika/prywatne komunikaty
    aplikacji
  • Komunikat moze byc
  • umieszczony w kolejce zwiazanej z aplikacja
  • dostarczony z pominieciem kolejki bezposrednie
    wywolanie funkcji obslugi okna przez system (z
    komunikatem jako parametrem)

8
Przykladowe komunikaty
  • WM_PAINT wymusza przerysowanie obszaru
    roboczego (lub jego fragmentu)
  • WM_DESTROY zniszczenie okna zwykle konczy cala
    aplikacje przez wyslanie WM_QUIT
  • WM_RBUTTONDOWN komunikat o zachowaniu (zmianie
    stanu) myszy
  • WM_COMMAND komenda systemowa. Jej typ jest
    okreslony przez dodatkowe dane wParam.
  • WM_QUIT wysylany przez PostQuitMessage() konczy
    glówna petle zdarzen
  • Nieobsluzone komunikaty przekazywane sa do
    systemu -gt DefWindowProc()

9
Zródla komunikatów
  • Kolejkowanych
  • aplikacja PostMessage()
  • klawiatura np. WM_KEYDOWN
  • mysz np.WM_LBUTTONDOWN
  • zdarzenia zwiazane 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 odzwierciedlajaca obiekt
    graficzny prezentowany (lub nie) na ekranie
  • struktura danych kontrolowana przez programiste
    pozwalajaca wplywac 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 srodowisko wykonawcze
  • CLR
  • Obsluga wersjonowania komponentów
  • Unifikacja modeli danych, bibliotek
  • Definiowalny hierarchiczny system zabezpieczen
  • Kompatybilnosc z COM/COM
  • Zarzadzanie pamiecia, garbage colector
  • Hierarchiczny uklad funkcjonalnosci
    udostepnianiej przez system

13
.Net rozwój
  • .NET Framework 1.0 (VS 2002)
  • .NET Framework 1.1 (VS 2003)
  • .NET Framework 2.0 (VS 2005)
  • .NET Framework 3.5 (VS 2008)
  • .NET Framework 4.0 (VS 2010)
  • .NET Framework 4.5 (VS 2012)

14
.NET kod wykonywalny
Native Code
JITC
Microsoft Intermediate Language
Kod zródlowyVB, C, VC (?), COBOL, ...
Kompilatory jezyków
ngen.exe
15
.NET srodowisko 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 srodowisko wykonawcze
Kod zarzadzalny - Managed Code
Common Lnguage Routine
Obudowa istniejacych uslug
Nowe uslugi
Win32
17
PRYMITYW APLIKACJI C
  • using Systemusing 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())

18
Interfejs Uzytkownika
  • WindowForms klasy w duzej mierze obudowujace
    kontrolki Win32
  • WebForms klasy przeznaczone dla aplikacji WEB
    (IIS) (wzorowane na WF) dynamicznie dostosowujace
    sie np. do typu przegladarki i dostepnych
    protokolów
  • WPF(Silverlight) nowa warstwa prezentacji
    wykorzystujaca DirectX dostepna od .NET 3.0

19
.Net Okna dialogowe
  • Uzycie okienka dialogowego
  • ShowModal() - modalnie
  • Show() niemodalnie
  • Automatycznie tworzone sa skladniki (atrybuty)
    zwiazane z kontrolkami systemowymi

20
.NET - lektura
  • MSDN
  • Hierarchia namespaces
  • Mapa Api -gt .NET class library
  • http//msdn.microsoft.com/library/default.asp?url
    /library/en-us/dndotnet/html/win32map.asp

21
(No Transcript)
22
Narzedzia
  • 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 jezyk opisujacy definicje GUI
  • wbudowany databinding definiowany na poziomie
    definicji zasobów
  • rozdzielenie wygladu od logiki
  • uzycie hierarchicznych stylów, separacja zachowan
    kontrolek od wygladu (branding)
  • wykorzystanie sprzetowej akceleracji (oparty na
    DirectX)
  • odejscie od koncepcji interfejsu opartego o staly
    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.
  • Kodskompilowany markup (BAML). preferowane i
    jedyne wspierane przez VS pdejscie. Szablony w
    XAML sa kompilowane i wlaczane do assembly.
  • Kodnieskompilowany markup (XAML) to podejscie
    ma gdy potrzebny jest dynamiczny interfejs
    XamlReader (System.Windows.Markup) pozwala
    wczytac i skompilowax XAML w czasie wykonania.

27
Xaml
  • pozwala definiowac obiekty i ustawiac ich
    wlasciwosci
  • zostal zaprojektowny dla wygodnej pracy z WPF

28
XAML
  • Struktura

ltPage xmlns"http//schemas.microsoft.com/winfx/20
06/xaml/presentation" xmlnssys"clr-namespaceSys
temassemblymscorlib" xmlnsx"http//schemas.mic
rosoft.com/winfx/2006/xaml" gt ... lt/Pagegt
Code behind
ltWindow xClass"WindowsApplication1.Window1"
Zagniezdzanie elementów
ltButtongt ltImage Source"c\windows\Blue Lace
16.bmp"/gt lt/Buttongt
29
Narzedzia
  • 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
  • ltDockPanelgt
  • ltTextBox DockPanel.Dock"Top"gtDock
    "Top"lt/TextBoxgt
  • ltTextBox DockPanel.Dock"Bottom"gtDock
    "Bottom"lt/TextBoxgt
  • ltTextBox DockPanel.Dock"Left"gtDock
    "Left"lt/TextBoxgt
  • ltTextBox Background"White"gtThis TextBox "fills"
    the remaining space.lt/TextBoxgt
  • lt/DockPanelgt

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 mozna zagniezdzac
  • ListBoxItem, ComboBoxItem moga zawierac niemal
    dowolne elementy
  • mozliwe jest zdefinowanie wygladu danych
    (dataTemplates)

35
Data Binding
36
Binding
  • Mozliwy jest binding do kontrolek, xmla,
    obiektów, elementów spoza okna
  • Dzieki bindingowi mozliwa jest budowa bardzo
    cienkiego UI caly kod definiujacy wyglad jest w
    takim wypadku wyniesiony z kontrolera/prezentera
    co b. dobrze wspólgra 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 - domyslnie wskazuje na DataContekst (moze
    byc odziedziczone po poprzedniku). po ustawieniu
    source na wrtosc ! null operacje bindingu
    traktuja s. jako miejsce z ktorego pobierac/w
    którym skladac dane.
  • Path pozwala okreslic property obiektu
    zródlowego (typu PropertyPath).
  • ElementName moze byc uzyte jako alternatywna
    nazwa dla Source pozwala okreslic nazwe
    elementu uzywanego jako zródlo danych.
  • Converter (typu IValueConverter) moze zostac
    zainicjowane instancja obiektu konwerujacego
    dane.

39
Definiowanie Bindingu Xaml-1
  • ltTextBox Text "Binding SourceApplication.Curre
    nt, PathmyAppProperty"
  • /gt
  • Lub
  • ltTextBoxgt
  • ltTextBox.Textgt
  • ltBinding Source"Application.Current Path"
    myAppProperty" /gt
  • lt/TextBox.Textgt
  • lt/TextBoxgt

40
Definiowanie Bindingu Xaml-2
  • lt TextBox Text "Binding ElementNameControlABC,
    PathColorName"
  • /gt
  • ltListBox ItemsSource"Binding Source
    StaticResource myDataSource
  • /gt
  • ltStackPanel DataContext StaticResource
    myDataSource"
  • ltListBox ItemsSource"Binding" /gt
  • ltTextBox Text"Binding Path/Name" /gt
  • lt/StackPanelgt

41
Definiowanie Zasobów
  • ltWindow.Resourcesgt
  • ltCollectionViewSource Source"Binding
    SourcexStatic Application.Current,
    PathGames"
  • xKey" myDataSource" /gt
  • ltDataTemplate xKey"myDateTemplate"gt
  • ltTextBlock Text"Binding PathTitle
  • Foreground"Navy"
  • FontWeight"Bold" FontSize"12"/gt
  • lt/DataTemplategt
  • lt/Window.Resourcesgt

zródlo
szablon
42
Szablon
  • Pozwala okreslic sposób wyswietlania obiektu
  • Szablon to foremka do produkcji zestawów
    kontrolek zbindowanych do danych
  • Szablon moze byc
  • Aplikowany do konkretnej kontrolki
  • Domyslny dla typu danych
  • ltListBox ItemsSource"Binding Source
    StaticResource myDataSource"
    ItemTemplate"StaticResource myDateTemplate"
  • /gt

43
brak Data template
  • namespace WPF_Test
  • public class River
  • public string Name get set
  • public int MilesLong get set
  • ltStackPanelgt
  • ltStackPanel.Resourcesgt
  • ltlocalRiver xKey"theRiver" Name"Colorado
    River" MilesLong"1450"/gt
  • lt/StackPanel.Resourcesgt
  • ltContentControl Content"StaticResource
    theRiver " /gt
  • lt/StackPanelgt

44
zdefiniowany Data template
  • ltDataTemplate DataType"xType localRiver"gt
    ltBorder BorderBrush"Blue" BorderThickness"3"
    CornerRadius"12"gt ltGrid Margin"4"gt
    ltTextBlockgt ltRun Text"The"/gt
    ltTextBlock Text"Binding Name"/gt ltRun
    Text"is"/gt ltTextBlock Text"Binding
    MilesLong" /gt ltRun Text"miles long." /gt
    lt/TextBlockgt lt/Gridgt lt/Bordergt
  • lt/DataTemplategt

45
WPF Dependancy properties
  • Jezeli obiekt nie ma zdefiniowanej dziedziczonej
    wlasciwosci wtedy uzywana jest wartosc z
    elementu nadrzednego (rodzica w drzewie). Uwaga!
    drzewo oznacza drzewo obiektów (np. kontrolek) a
    nie klas - analogicznie do ambient properties w
    Window Forms
  • Mozna je ustawiac z poziomu XAML (jak zwykle p.)

46
WPF Data context
  • elementy w WPF maja wlasciwosc DataContext
  • jezeli zostanie ona ustawiona na jakis obiekt
    wszystkie elementy pochodne (dzieci w drzewie
    obiektów) przejmuja (dziedzicza) ta wartosc
    chyba, ze explicite okreslimy inaczej
  • Mozna w ten sposób okreslic binding dla calego
    drzewa obiektów

47
Binding - zródla danych
  • obiekty CLR
  • obiekty uzytkownika
  • kolekcje
  • XML
  • ADO
  • Nie mozna bindowac do pól (do wlasciwosci jak
    najbardziej)

48
Przeplyw danych w Bindingu
  • OneWay
  • TwoWay
  • OneWayToSource

49
Wyzwalanie aktualizacji w Bindingu
50
Binding - konwersje
  • "Binding PathTheDate, ConverterStaticResource
    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 wielowartosciowe
  • public class SumatorConverter
    IMultiValueConverter
  • public object Convert(object values, Type
    targetType, object parameter, CultureInfo
    culture )
  • int s1 (int)values1
  • int s2 (int)values2
  • return s1s2
  • public object ConvertBack(object value,
    Type targetTypes, object parameter,
    CultureInfo culture )
  • throw new NotSupportedException( "Cannot
    convert back" )

53
WPF binding konwertery wielowartosciowe
  • ltRectangle.WidthgtltMultiBinding
    Converter"StaticResource SumatorConverter "gt
  • ltBinding ElementName "man" Path "Incomes" /gt
  • ltBinding ElementName "woman" Path
    "Incomes" /gt
  • lt/MultiBindinggt
  • lt/Rectangle.Widthgt

54
Binding walidacja
  • Przebieg bindingu
  • Uruchamiane sa (jezeli sa) indywidualne reguly
    walidacji (do pierwszego bledu) dla wartosci
    pierwotnych (ValidationStep ustawiony na
    RawProposedValue)
  • Uruchamiany jest konwerter (jezeli istnieje), ew.
    bledy (wyjatki) przerywaja proces
  • Uruchamiane sa (jezeli sa) indywidualne reguly
    walidacji (do pierwszego bledu) dla wartosci
    wynikowych (ValidationStep ustawiony na
    ConvertedProposedValue)
  • Ustawiana jest wartosc wynikowa
  • Uruchamiane sa (jezeli sa) indywidualne reguly
    walidacji (do pierwszego bledu) dla wartosci
    zaktualizowanych (ValidationStep ustawiony na
    UpdatedValue lub CommittedValue)
  • Ew. blad jest dodawany do kolekcji
    Validation.Errors skojarzonej z elementem (jest
    ona czyszczona przed p. 1).

55
Binding dignostyka
  • PresentationTraceSources.SetTraceLevel
  • Lub
  • ltTextBoxgt
  • ltTextBox.Textgt
  • ltBinding Source"StaticResource myDataSource"
    Path"PersonName" diagPresentationTraceSource
    s.TraceLevel"High"/gt lt/TextBox.Textgt
  • lt/TextBoxgt

56
Uzycie 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)
  • Debugger.Break()
  • return value

57
Formatowanie ?
  • Dla potrzeb formatowania danych w szablonie mozna
    wykorzystac konweretery
  • Przyklad jak spowodowac zeby wartosc bool byla
    wyswietlana jako tak/nie
  • Podejscie pierwsze specjalizowany konwerter
  • ltDataTemplate xKey"myDetailTemplate"gt
  • ...
  • ltTextBlock Text"Binding PathIsAvailiable,
    ConverterStaticResource boolYNConverter"/gt
  • lt/DataTemplategt

58
Formatowanie vs konwersja?
  • ValueConversion(typeof(bool), typeof(String))
  • public class BoolYesNoConverter
    IValueConverter
  • public object Convert(object value, Type
    targetType, object parameter, System.Globalizati
    on.CultureInfo culture)
  • return (bool)value ? "yes"
    "no"
  • public object ConvertBack(object value, Type
    targetType, object parameter,
    System.Globalization.CultureInfo culture)
  • return null

59
Formatowanie ?
  • Podejscie drugie specjalizowany binding
  • ltDataTemplate xKey"myDetailTemplate"gt
  • ...
  • ltTextBlock Text"srcBoolBindingExtension
    Status.WantToPlay, Yes, No "/gt
  • lt/DataTemplategt

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)

61
  • private class BoolConverter IValueConverter
  • public BoolConverter(BoolBindingExtens
    ion boolExtension) _bool
    boolExtension
  • private BoolBindingExtension _bool
  • public object Convert(object value,
    Type targetType, object parameter, CultureInfo
    culture)
  • try
  • bool b System.Convert.ToBool
    ean(value)
  • return b ? _bool.ValueIfTrue
    _bool.ValueIfFalse
  • catch
  • return DependencyProperty.Unse
    tValue

62
Podejscie trzecie biblioteka Kent.Boogaart.Conve
rters
  • ltTextBlockgt
  • ltTextBlock.Textgt
  • ltBinding Path"Status.WantToPlay"gt
  • ltBinding.Convertergt
  • ltconMapConvertergt
  • ltconMapping To"YES" gt

  • ltconMapping.Fromgt

  • ltSystemBooleangtTruelt/SystemBooleangt

  • lt/conMapping.Fromgt
  • lt/conMappinggt
  • ltconMapping To"NO" gt

  • ltconMapping.Fromgt
  • ltSystemBooleangtFalselt/SystemBooleangt

  • lt/conMapping.Fromgt
  • lt/conMappinggt
  • lt/conMapConvertergt
  • lt/Binding.Convertergt
  • lt/Bindinggt
  • lt/TextBlock.Textgt

63
Style
  • ltStyle TargetType"xType Button"gt ltSetter
    Property"Background" Value"Yellow" /gt
  • lt/Stylegt
  • definicja
  • xaml
  • programowa w kodzie

64
Triggery
  • trigger jest odpowiednikiem "if" w kodzie
    proceduralnym
  • ltTrigger SourceName"bdr" Property"IsMouseOver"
    Value"True"gt ltSetter TargetName"bdr"
    Property"Background" Value"LightGray"/gt
    ltSetter TargetName"txt" Property"Foreground"
    Value"Red"/gt
  • lt/Triggergt
  • trigger oparty na wielu wartosciach
  • ltMultiDataTrigger.Conditionsgt ltCondition
    Binding"Binding IsFinished" Value"True" /gt
    ltCondition Binding"Binding IsWinner"
    Value"False" /gt
  • lt/MultiDataTrigger.Conditionsgt

, Path""
65
Kolekcje vs. Binding
  • Zródlo odpowiada nie tylko za liste elementów ale
    równiez za wskaznik biezacego elementu (Path/),
    na zródlo mozna nakladac filtry, grupowac
    elementy, sortowac
  • Scenariusz master detail
  • Dla obiektów Ado aby sortowanie dlegowac do
    obiektu ado trzeba stosowac kolekcji mozliwe
    obiekty CLR
  • obiekty uzytkownika
  • kolekcje
  • XML
  • ADO

66
WPF Animacje
  • Polega na zmianie wskazanej wlasciwosci
    okreslonego obiektu w zadanym rytmie
  • Typy animacji
  • from/to/by ColorAnimation, DoubleAnimation,
    PointAnimation
  • key-frames ColorAnimationUsingKeyFrames,
    DoubleAnimationUsingKeyFrames, PointAnimationUsing
    KeyFrames, StringAnimationUsingKeyFrames
  • path DoubleAnimationUsingPath,
    PointAnimationUsingPath

67
WPF Geometria 2d/3d
  • Viewport3D
  • Wspólrzedne przestrzeni 3D

68
WPF elementy sceny
  • kamery, modele, siatki, materialy

69
WPF Konstrukcja sceny
  • ltViewport3D gt
  • ltViewport3D.Cameragt
  • ltPerspectiveCamera Position"-3,1,8"
    LookDirection"3,-1,-8"

  • UpDirection"0,1,0" FieldOfView"45"

  • NearPlaneDistance"0.15" /gt
  • lt/Viewport3D.Cameragt
  • ltModelVisual3Dgt
  • ltModelVisual3D.Contentgt
  • ltModel3DGroup gt
  • lt/Model3DGroup gt
  • lt/ModelVisual3D.Contentgt
  • lt/ModelVisual3Dgt lt/Viewport3D gt

70
WPF Grupa 3D
  • ltGeometryModel3Dgt
  • ltGeometryModel3D.Geometrygt
  • ltMeshGeometry3D
  • 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" /gt
  • lt/GeometryModel3D.Geometrygt
  • ltGeometryModel3D.Materialgt
  • ltDiffuseMaterial Brush"Aqua" /gt
  • lt/GeometryModel3D.Materialgt
  • lt/GeometryModel3Dgt

71
WPF Swiatla
  • ltModel3DGroupgt
  • ltModel3DGroup.Childrengt
  • ltAmbientLight Color"ffcccccc"/gt
  • ltDirectionalLight Color"LightGray"
    Direction"-1,-1,-1" /gt
  • lt/Model3DGroup.Childrengt
  • lt/Model3DGroupgt

72
WPF swiatla
  • AmbientLight swiatlo otoczenia. Jego jedynym
    parametrem jest Color.
  • DirectionalLight swiatlo kierunkowe. Posiada
    kolor oraz kierunek okreslony parametrem
    Direction, w jakim padaja jego promienie.
  • PointLight swiatlo punktowe. Parametry
    Position, Range(dl. fali), zmiana intensywnosci -
    (ConstantAttenuation,LinearAttenuation,
    QuadraticAttenuation).
  • SpotLight swiatlo punktowo-kierunkowe.
    Parametry stozka Position, Direction,
    InnerConeAngle,OuterConeAngle wl. dla PointLight

73
WPF elementy sceny
  • perspektywa rzecz kamery ?

74
WPF Materialy
  • DiffuseMaterial material rozpraszajacy
  • SpecularMaterial material odblaskowy
  • EmmisiveMaterial material emisyjny
  • tekstury

75
Linki
  • WPF 3DPanel Przyklad panel3d Josh Smith
    http//www.codeproject.com/KB/WPF/panel3d.aspx
  • WPF vs grafika, animacjehttp//msdn.microsoft.co
    m/en-us/library/ms742562.aspx

76
WPF input events
  • ... zdefiniowane jako pary sa implementowane tak
    ze pojedyncza akcja np. klikniecie mysza wywoluje
    dwa po sobie nastepujace zdarzenia
  • tunneling
  • bubble
  • Oba zdarzenia wspóldziela dokladnie ta sama
    instancje danych opisujacych zdarzenie. Stad
    zdarzenie moze zostac obsluzone nie przez
    element, w którym mialo miejsce
  • http//msdn.microsoft.com/en-us/magazine/cc785480.
    aspx

77
WPF routed events
  • Bubbling wolany jest event handler w el.
    zródlowym a potem kolejno w rodzicach.
  • Direct Tylko zródlowy element wola handler
  • Tunneling handlery wolane sa od roota do zródla
  • 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
  • Zwykly handler zdefiniowany w elemencie
  • ltButton Name"myButton" Click"myButton_Click"gtTe
    st Button
  • lt/Buttongt
  • Handler zdefinowany na zewnatrz elementu
    (attached event)
  • ltGrid Button.Click"myButton_Click"gt
  • ltButton Name"myButton" gtClick Melt/Buttongt
  • lt/Gridgt

79
WPF obsluga zdarzenia
  • Obsluzenie zdarzenia
  • private void OnMyElementMouseDown(object
    sender, MouseButtonEventArgs e)
  • e.Handled true
  • Handler wolany zawsze (nawet dla z. obsluzonych)
  • m_myElement.AddHandler(UIElement.MouseDownEvent,
    (RoutedEventHandler)OnMouseDownMyHandler,true)

80
WPF RoutedCommand
  • Routed Command RoutedCommand
  • Routted command vs klasyczna obsluga
  • mozliwosc uruchamiania zdarzenia przez wiele
    zródel (bez definiowania h. w kodzie)
  • blokowanie wszystkich zródel jednoczesnie i
    automatycznie (-gtCommandManager)
  • mozliwosc oddzielenie kodu od samej formy (MVC)
  • http//msdn.microsoft.com/en-us/magazine/cc785480.
    aspx
  • http//www.codeproject.com/Articles/28093/Using-Ro
    utedCommands-with-a-ViewModel-in-WPF

81
WPF definiowanie komendy
  • ltButton Command"Save"gtSavelt/Buttongt
  • ltButton Command"Save" CommandTarget"Binding
    ElementNameuc1" Width"75" Height"25"gtSavelt/But
    tongt

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
  • http//msdn.microsoft.com/en-us/library/ms745058.a
    spxLayoutSystem_Measure_Arrange

83
Dane dla designera
  • xmlnsd"http//schemas.microsoft.com/expression/b
    lend/2008"
  • ...
  • public MyData get return new Person()
    Name "Harry"
  • ...
  • dDataContext"Binding RelativeSource Relativ
    eSource Self, PathMyData"
  • http//blogs.msdn.com/b/wpfsldesigner/archive/2010
    /06/30/sample-data-in-the-wpf-and-silverlight-desi
    gner.aspx

84
WPF Dokumenty
  • DocumentViewer
  • FlowDocumentReader, FlowDocumentPageViewer,
    FlowDocumentScrollViewer
  • XML Paper Specification (XPS)
  • Wiecej tu http//msdn.microsoft.com/en-us/library
    /ms749165.aspx

85
WPF Typografia
  • Skalowanie (urzadzenia mobilne)
  • Wykorzystanie ClearType
  • Duze usprawnienia w wersji 4.0
  • Wiecej tu http//msdn.microsoft.com/en-us/library
    /ms742190.aspx

86
WPF vs WinForms
  • http//blogs.msdn.com/b/scoberry/archive/2006/09/0
    1/735844.aspx
  • http//www.simple-talk.com/dotnet/.net-framework/m
    ixing-wpf-and-winforms/

87
WPF wielowatkowosc
  • wydzielony watek do renderowania formy
  • Dostep z innego watku
  • Window1 win (Window1) state
  • for (int i 0 i lt 100 i) win.Dispatcher.Inv
    oke(new ActionltProgressBar, intgt( (p, v) gt
    p.Value v), win.progress1, i)
  • http//msdn.microsoft.com/en-us/library/ms741870.a
    spx

88
WPF - zródla
  • http//joshsmithonwpf.wordpress.com/a-guided-tour-
    of-wpf/
  • http//www.codeproject.com/KB/WPF/VMCommanding.asp
    x
  • http//msdn.microsoft.com/en-us/library/ms754130.a
    spx
  • http//www.wpf-tutorial.com/
  • http//www.wpftutorial.net/
  • http//www.wpfpedia.com/
  • Ksiazki
  • WPF 4 Unleashed, Adam Nathan
  • Advanced MVVM, Josh Smith
Write a Comment
User Comments (0)
About PowerShow.com