Programowanie Lokalnych Aplikacji .NET

Slides:



Advertisements
Podobne prezentacje
Programowanie Windows
Advertisements

Jarosław Kuchta Komunikaty w Windows.
Decyzje projektowe w .NET Framework
CLR na platformie .NET Tomasz Kostarski.
ASP.NET 2.0 AJAX Extensions 1.0
.NET - możliwości Jarosław Balcer & Jan Góralski.
Platforma .Net i Vs.Net.
Tworzenie ASP.NET Web Form
Programowanie w środowiskach zintegrowanych wykład 1 PSZ Programowanie w Środowiskach Zintegrowanych > Systemy i środowiska zintegrowane > Środowisko zintegrowane.
Systemy operacyjne Wykład nr 5: Wątki Piotr Bilski.
ASP.NET i platforma.NET Technologie internetowe ( ) Tomasz Popów
SZPIF – Harmonogram, Opis narzędzi, Schemat bazy danych
C# Windows Forms Zastosowania Informatyki Wykład 3
C# Windows Forms Zastosowania Informatyki Wykład 2
Modelowanie w Visual Studio 2010
Test Doubles Adam Gabryś , v1.1,
Programowanie w Środowisku Windows
Rozwój aplikacji przy wykorzystaniu ASP.NET
Aplikacje Internetowe
Witold Bołt Wprowadzenie do .NET Witold Bołt
Programowanie w Środowisku Windows Common controls.
CUDA & CUDA.NET – czyli istne CUDA Piotr Ablewski
Programowanie w Środowisku Windows
Podstawy programowania II
Opracował : Przemysław Drzymała
Realizacja aplikacji internetowych Silverlight. Silverlight – krótka historia Silverlight 1 beta - wiosna 2007 Silverlight 2 beta – wiosna 2008 produkcja.
Podstawy WINAPI - MessageBOX
System operacyjny napisany w.NET (ogólnie rzecz biorąc)
Witold Bołt. Agenda W czym tkwi problem..? Po co jest oprogramowanie? Kim jest użytkownik? Zbieranie danych Co to jest design Współpraca programista-projektant.
Programowanie Windows na przykładzie C# część 1
Programowanie obiektowe – zastosowanie języka Java SE
Programowanie w Środowisku Windows
Wykonał: Michał Nikołajuk
Narzędzia administracyjne
Silverlight Marcin Badurowicz
Programowanie komponentowe jesień-zima 2013
Kostyantyn Doronovych, 79129, sr1640 Łukasz Marciniak, 79166, sr1640
Kostyantyn Doronovych, 79129, sr1640 Łukasz Marciniak, 79166, sr1640
Technologie Programowania seminarium
Wstęp do ASP.NET Arkadiusz Popa Serwery Aplikacji
Programowanie w języku C++
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Systemy operacyjne Wykład 3a Działanie aplikacji okienkowej dr inż. Wojciech Bieniecki Instytut Nauk Ekonomicznych i Informatyki
Biblioteka DLL w oparciu o źródła w języku C
Oprogramowanie komponentowe w środowisku Microsoft Katarzyna Kuźniar 4 FDA, C1.
HTML (ang. HyperText Markup Language ) – język do tworzenia stron internetowych opierający się na znacznikach, czy inaczej je nazywając – tagach. Język.
Projektowanie Aplikacji Internetowych Artur Niewiarowski Wydział Fizyki, Matematyki i Informatyki Politechnika Krakowska.
Technologie internetowe Wykład 5 Wprowadzenie do skrytpów serwerowych.
Tworzenie graficznego interfejsu użytkownika (GUI)
Technologie internetowe i mobilne
Programowanie Windows (Win32/Win64 API)
Programowanie w środowisku sieciowym W. Bartkiewicz 1. Wprowadzenie do platformy.NET.
Waldemar Bartyna 1 Programowanie zaawansowane LINQ to XML.
Jak przestałem się martwić i pokochałem tworzenie aplikacji okienkowych. źródło:
Platforma .Net.
Komunikaty Windows Jacek Matulewski 22 września 2012 Programowanie Windows
 Podstawowy składnik.NET Framework  Technologia tworzenia w pełni dynamicznych stron internetowych działających po stronie serwera  Zorientowanie na.
ASP.NET Tworzenie i zarządzanie wyglądem aplikacji, tworzenie mapy witryny. Kontrolki nawigacyjne.
Implementacja wzorca MVVM w Prism 5.0
Komunikacja pomiędzy luźno powiązanymi komponentami Mateusz Sionkowski.
Co to jest WPF? Silnik graficzny odpowiedzialny za renderowanie interfejsów (nie tylko!) użytkownika aplikacji dla Windows. Dostępny od.NET 3.0 (2006)
Programowanie Obiektowe – Wykład 6
Programowanie Obiektowe – Wykład 2
Programowanie obiektowe – zastosowanie języka Java SE
Windows Workflow Foundation
Aplikacje i usługi internetowe
Podstawy programowania
Tworzenie graficznego interfejsu użytkownika (GUI)
Zapis prezentacji:

Programowanie Lokalnych Aplikacji .NET Architektura

Prymityw aplikacji WIN32 .NET

Architektura aplikacji win32

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

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

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

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)

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()

Ź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.

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);

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

.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

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

.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

.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

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

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#

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

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

.NET - lektura MSDN Hierarchia namespaces Mapa Api -> .NET class library: http://msdn.microsoft.com/library/default.a sp?url=/library/en- us/dndotnet/html/win32map.asp

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

Programowanie Lokalnych Aplikacji .NET WPF

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

WPF architektura

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.

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

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>

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

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.

<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>

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.

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.

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)

Data Binding

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

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

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.

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

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

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

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

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>

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>

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.)

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

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)

Przepływ danych w Bindingu OneWay TwoWay OneWayToSource

Wyzwalanie aktualizacji w Bindingu

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

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" ); } }

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" );

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

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).

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

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) {

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>

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;

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

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 {...}

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;

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

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

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=""

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

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

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

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

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 >

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>

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

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

WPF elementy sceny perspektywa – rzecz kamery 

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

Linki WPF 3DPanel: Przykład – panel3d Josh Smith http://www.codeproject.com/KB/WPF/panel3d.aspx WPF vs grafika, animacje: http://msdn.microsoft.com/en-us/library/ms742562.aspx

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 http://msdn.microsoft.com/en-us/magazine/cc785480.aspx

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.

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>

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);

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) http://msdn.microsoft.com/en-us/magazine/cc785480.aspx http://www.codeproject.com/Articles/28093/Using-RoutedCommands-with-a-ViewModel-in-WPF

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

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.aspx#LayoutSystem_Measure_Arrange

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}" http://blogs.msdn.com/b/wpfsldesigner/archive/2010/06/30/sample-data-in-the-wpf-and-silverlight-designer.aspx

WPF Dokumenty DocumentViewer FlowDocumentReader, FlowDocumentPageViewer, FlowDocumentScrollViewer XML Paper Specification (XPS) Więcej tu http://msdn.microsoft.com/en-us/library/ms749165.aspx

WPF Typografia Skalowanie (urzadzenia mobilne) Wykorzystanie ClearType Duże usprawnienia w wersji 4.0 Więcej tu http://msdn.microsoft.com/en-us/library/ms742190.aspx

WPF vs WinForms http://blogs.msdn.com/b/scoberry/archive/2006/09/01/735844.aspx http://www.simple-talk.com/dotnet/.net-framework/mixing-wpf-and-winforms/

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); } http://msdn.microsoft.com/en-us/library/ms741870.aspx

WPF - źródła http://joshsmithonwpf.wordpress.com/a-guided-tour-of-wpf/ http://www.codeproject.com/KB/WPF/VMCommanding.aspx http://msdn.microsoft.com/en-us/library/ms754130.aspx http://www.wpf-tutorial.com/ http://www.wpftutorial.net/ http://www.wpfpedia.com/ Ksiązki: “WPF 4 Unleashed”, Adam Nathan “Advanced MVVM”, Josh Smith