Title: Programowanie Lokalnych Aplikacji .NET
1Programowanie Lokalnych Aplikacji .NET
2- Prymityw aplikacji
- WIN32
- .NET
3Architektura aplikacji win32
4Organizacja 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
5FUNKCJA 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
6Komunikat
- Reprezentowany przez
- ID
- Dodatkowe parametry
- word
- long
- Oprócz powyzszych informacji funkcja obslugi okna
otrzymuje dodatkowo uchwyt okna dlaczego ?
7Komunikaty
- 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)
8Przykladowe 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()
9Zró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.
10Okno 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)
11CLI
- 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
17PRYMITYW 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()) -
18Interfejs 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)
22Narzedzia
- SPY
- ILDASM.EXE
- REFLECTOR, DotPeek
- UISPY
- R
- FXCop
- DEPENDENCY WALKER
23Programowanie Lokalnych Aplikacji .NET
24WPF
- 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
25WPF architektura
26WPF 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.
27Xaml
- pozwala definiowac obiekty i ustawiac ich
wlasciwosci - zostal zaprojektowny dla wygodnej pracy z WPF
28XAML
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
29Narzedzia
- XAMLPAD, XAMLPAD
- VS2008, VS2010
- Expression Blend
30Pozycjonowanie 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
32Kontrolki
- 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.
33Kontrolki
- 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.
34WPF kontrolki
- WPF 4 Calendar, DataPicker
- kontrolki mozna zagniezdzac
- ListBoxItem, ComboBoxItem moga zawierac niemal
dowolne elementy - mozliwe jest zdefinowanie wygladu danych
(dataTemplates)
35Data Binding
36Binding
- 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
37Definiowanie Bindingu
- Definicja programowa
- Binding myBinding new Binding("MyDataProperty")
- myBinding.Source myDataObject
- myText.SetBinding(TextBlock.TextProperty,
myBinding)
38WPF 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.
39Definiowanie 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
40Definiowanie 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
41Definiowanie 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
42Szablon
- 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
43brak 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
44zdefiniowany 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
45WPF 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.)
46WPF 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
47Binding - zródla danych
- obiekty CLR
- obiekty uzytkownika
- kolekcje
- XML
- ADO
- Nie mozna bindowac do pól (do wlasciwosci jak
najbardziej)
48Przeplyw danych w Bindingu
- OneWay
- TwoWay
- OneWayToSource
49Wyzwalanie aktualizacji w Bindingu
50Binding - konwersje
- "Binding PathTheDate, ConverterStaticResource
MyConverterReference"
51WPF 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" ) -
52WPF 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" ) -
53WPF 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
54Binding 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).
55Binding dignostyka
- PresentationTraceSources.SetTraceLevel
- Lub
- ltTextBoxgt
- ltTextBox.Textgt
- ltBinding Source"StaticResource myDataSource"
Path"PersonName" diagPresentationTraceSource
s.TraceLevel"High"/gt lt/TextBox.Textgt - lt/TextBoxgt
56Uzycie 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
-
57Formatowanie ?
- 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
58Formatowanie 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
-
-
59Formatowanie ?
- 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 -
-
62Podejscie 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
63Style
- ltStyle TargetType"xType Button"gt ltSetter
Property"Background" Value"Yellow" /gt - lt/Stylegt
- definicja
- xaml
- programowa w kodzie
64Triggery
- 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""
65Kolekcje 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
66WPF 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
67WPF Geometria 2d/3d
- Viewport3D
- Wspólrzedne przestrzeni 3D
68WPF elementy sceny
- kamery, modele, siatki, materialy
69WPF 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
70WPF 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
71WPF Swiatla
- ltModel3DGroupgt
- ltModel3DGroup.Childrengt
- ltAmbientLight Color"ffcccccc"/gt
- ltDirectionalLight Color"LightGray"
Direction"-1,-1,-1" /gt - lt/Model3DGroup.Childrengt
- lt/Model3DGroupgt
72WPF 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
73WPF elementy sceny
- perspektywa rzecz kamery ?
74WPF Materialy
- DiffuseMaterial material rozpraszajacy
- SpecularMaterial material odblaskowy
- EmmisiveMaterial material emisyjny
- tekstury
75Linki
- 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
76WPF 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
77WPF 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.
78WPF 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
79WPF 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)
80WPF 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
81WPF definiowanie komendy
- ltButton Command"Save"gtSavelt/Buttongt
- ltButton Command"Save" CommandTarget"Binding
ElementNameuc1" Width"75" Height"25"gtSavelt/But
tongt
82Renderowanie 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
83Dane 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
84WPF Dokumenty
- DocumentViewer
- FlowDocumentReader, FlowDocumentPageViewer,
FlowDocumentScrollViewer - XML Paper Specification (XPS)
- Wiecej tu http//msdn.microsoft.com/en-us/library
/ms749165.aspx
85WPF Typografia
- Skalowanie (urzadzenia mobilne)
- Wykorzystanie ClearType
- Duze usprawnienia w wersji 4.0
- Wiecej tu http//msdn.microsoft.com/en-us/library
/ms742190.aspx
86WPF 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/
87WPF 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
88WPF - 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