Wettbewerbstalon ausfüllen und tolle Preise gewinnen! Nicht vergessen! Wettbewerbstalon ausfüllen und tolle Preise gewinnen! Stempel bei Partner holen und einwerfen! Ziehung heute Abend 19:45 und 20:45 Uhr
Presentation_title Die neuen Features im Überblick Windows Presentation Foundation 4.0 Die neuen Features im Überblick Christian Moser Zühlke AG moc@zuehlke.com www.wpftutorial.net dd/mm/yyyy, author_alias
WPF 4.0 – Viele spannende, neue Funktionen Presentation_title WPF 4.0 – Viele spannende, neue Funktionen XAML Parser Animation Easing Calendar DatePicker DataGrid XAML 2009 Chart Control Layout rounding Ribbon Text rendering Spell-Check Dictionaries Pixel Shaders 3.0 Cached Composition Visual State Manager Full Trust XBAP TaskBar Integration XBAP/HTML Interop .NET Client Profile Windows 7 API Jumplists Custom ClickOnce UI DataBinding für InputBindings Virtual UI Automation Multitouch Common Dialogs Visual Studio 2010 dd/mm/yyyy, author_alias
Ziele von Microsoft für WPF 4.0 Ausbesserung von Schwachpunkten Interne Konsolidierung Wünsche der Community abdecken Produktivität der Entwickler erhöhen Bessere Controls für LoB Applikationen Modernisierung der API Bessere Kompatibilität mit Microsoft Silverlight
WPF Roadmap WPF 4.0 2007 2008 2009 2010 WPF 3.5 WPF 3.0 WPF 3.5 SP1 WPF Toolkit 2 VSM Chart WPF Toolkit 1 DataGrid DatePicker WPFToolkit 3 Theme Pack AutoCompleteBox Accordion 2007 2008 2009 2010 SL Toolkit 1 TreeView DockPanel WrapPanel SL Toolkit 2 Accordion TimePicker Chart Silverlight 1 Silverlight 3 Silverlight 2 Silverlight 4
Nächsten Montag 12 April 2010 4.0
<XAML />
Ein neuer XAML Stack für alles .NET 3.5 mscorlib System System.Xml .NET 4.0 WindowsBase PresentationCore PresentationFramework WCF / WF BAML Engine System.Xaml.dll XAML Type Info XAML Engine WCF / WF PresentationFramework XOML Engine XAML Engine BAML Engine PresentationCore WindowsBase XOML Type Info XAML Type Info mscorlib System System.Xml
Neue Sprachkonstrukte in XAML 2009 Presentation_title Neue Sprachkonstrukte in XAML 2009 Bessere Namensauflösung mit {x:Reference} Voller Support für Generics {x:TypeArguments} Built-in Types <x:String>, <x:Bool> Beliebige Typen für Dictionary Keys (x:Key ) Events ohne Kompilation (Findet die Methode in der Klasse oder über MarkupExtension) Konstruktoren mit Argumenten {x:Arguments} Factory Methods {x:FactoryMethod} dd/mm/yyyy, author_alias
Neuer XAML Parser Bessere Performance Viele BugFixes Konsistenz zu WCF und WF API zum Laden und Schreiben von XAML Später: Auch für Silverlight
XAML Object Model: O-M-V + Types Xaml Types Xaml <-> Object Umsetzungs- Beschreibung <StackPanel> <Button x:Name="button" Click="foo" Content="Test" /> <Button>Test</Button> <Button> <Button.Content>Test</Button.Content> </Button> </StackPanel> Objects Root Object Collection Members Properties Events Directives (x:Key) Values
XAML Node Stream Processing while reader.read() XamlXmlReader.Read() EndObject Button EndMember Content Value «Test» StartMember Content StartObject Button Xaml Type Xaml Member XamlObjectWriter.Write()
Beispiel «Robust XamlLoader» var reader = new XamlXmlReader("loose.xaml"); var writer = new XamlObjectWriter(reader.SchemaContext); while (reader.Read()) { switch (reader.NodeType) case XamlNodeType.StartObject: if (reader.Type.IsUnknown) continue; break; case XamlNodeType.StartMember: if (reader.Member.IsUnknown) } writer.WriteNode(reader); XAML Node Pump
PresentationFramework ...aber WCF / WF PresentationFramework VS2010 BAML Engine Markup Compiler x PresentationCore MarkupCompiler und Designer von VS2010 und Blend unterstützen diese Features noch nicht! Nur für Loose XAML... WindowsBase System.Xaml.dll XAML Engine XAML Type Info mscorlib System System.Xml
Neu Verfügbar: Microsoft XAML Toolkit Vollständige XAML DOM API XAML FxCop integration SilverlightSchemaContext to parse Silverlight XAML using System.Xaml XamlDomObject rootObject = XamlDomServices.Load("Window1.xaml"); foreach (XamlDomObject domObject in rootObject.DescendantsAndSelf()) { Console.WriteLine(domObject.Type); }
Weitere Informationen PDC 2008 – XAML 2009 http://channel9.msdn.com/pdc2008/TL36 PDC 2009 - XAML Futures http://microsoftpdc.com/Sessions/CL24 Blog von Rob Relyea (XAML Architekt) http://blogs.windowsclient.net/rob_relyea XAML Toolkit http://michaelshim.com/blog/2009/11/19/xaml-toolkit-ctp/
New Controls
DataGrid Control Features Auto generation of columns Demo Features Auto generation of columns Selection of cells and rows Grouping and filtering Frozen columns Column sorting, reordering and resizing Row details Flexible Styling
Calendar and DatePicker Control Demo Features Multiple selection modes Blackout Dates Limitation of displayed date range DisplayModes for Month, Year and Decade
Chart Control – WPF Toolkit
Ribbon Control – CTP Preview Presentation_title Ribbon Control – CTP Preview Features Special Ribbon Window All Features of Office 2010 Office 2007 und 2010 Themes Aber: - Release erst nach .NET 4.0 - Etwas MVVM unfreundliche API dd/mm/yyyy, author_alias
Styling
States von Controls Disabled Normal Mouseover Pressed Unfocused
Umsetzung in .NET 3.5 <Style TargetType="Button"> <Setter Property="Template"> <Setter.Value> <ControlTemplate> <Border Background="{TemplateBinding Background}"> <ContentPresenter /> </Border> </ControlTemplate> </Setter.Value> </Setter> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Background" Value="Blue" /> </Trigger> <Trigger Property="IsPressed" Value="True"> <Setter Property="Background" Value="DarkBlue" /> <Trigger Property="IsEnabled" Value="False"> <Setter Property="Background" Value="Gray" /> </Style.Triggers> </Style>
Der Visual State Manager Steuert die Zustände und Übergänge von Controls Verwendet dazu Storyboards Kompatibel zu Silverlight Wechsel zwischen States nur aus Code Internal VisualStateManager.GotoState() External VisualStateManager.GoToElementState() Control Visual State Manager
Visual State Manager in XAML <Border> <VisualStateManager.VisualStateGroups> <VisualStateGroup x:Name="TrafficStates"> <VisualState x:Name="Red"> <Storyboard> <ColorAnimationUsingKeyFrames …> <EasingColorKeyFrame Value="Red"/> </ColorAnimationUsingKeyFrames> </Storyboard> </VisualState> <VisualState x:Name="Yellow"> <EasingColorKeyFrame Value="Yellow"/> <VisualState x:Name="Green"> <EasingColorKeyFrame Value="Green"/> </VisualStateGroup> </VisualStateManager.VisualStateGroups> </Border>
Steuern von States aus XAML Demo Verwendung der GoToStateAction aus System.Windows.Interactivity xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" <local:TrafficLightControl> <i:Interaction.Triggers> <i:EventTrigger EventName="MouseLeftButtonDown" SourceObject="{Binding ElementName=trafficLightControl}"> <ei:GoToStateAction TargetObject="{Binding ElementName=trafficLightControl}" StateName="Yellow"/> </i:EventTrigger> </i:Interaction.Triggers> </local:TrafficLightControl>
Steuern von States aus dem Code [TemplateVisualState(Name = "Green", GroupName = "TrafficStates")] [TemplateVisualState(Name = "Yellow", GroupName = "TrafficStates")] [TemplateVisualState(Name = "Red", GroupName = "TrafficStates")] public partial class TrafficLightControl : UserControl { private void OnTrafficLightStateChanged(TrafficLight trafficLight) switch (trafficLight) case TrafficLight.Green: VisualStateManager.GoToState(this, "Green", true); break; case TrafficLight.Yellow: VisualStateManager.GoToState(this, "Yellow", true); case TrafficLight.Red: VisualStateManager.GoToState(this, "Red", true); }
Designer Support in Expression Blend
Animation Easing Machen Animationen «natürlicher» Verwendung spezieller EasingKeyFrames die eine EasingFunction verwenden <DoubleAnimationUsingKeyFrames … > <DoubleKeyFrame KeyTime="0:0:3" Value="370“ /> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames … > <EasingDoubleKeyFrame KeyTime="0:0:3" Value="370"> <EasingDoubleKeyFrame.EasingFunction> <BounceEase EasingMode="EaseOut"/> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames>
Animation Easing Functions WPF 4.0 bringt bereits viele EasingFunctions mit Demo
Animation Easing in Expression Blend Expression Blend 4 bietet eine sehr konfortable Unterstützung für Animation Easing
Eigene Easing Functions implementieren class CoolEasingFunction : EasingFunctionBase { protected override double EaseInCore(double normalizedTime) return Math.Abs(Math.Sin(normalizedTime * Math.PI * 2)) * normalizedTime; } protected override Freezable CreateInstanceCore() return new CoolEasingFunction();
Schrift in WPF
Probleme mit Schrift in .NET 3.5 Kleine Zeichen sind schlecht lesbar Schrift wird beim Animieren unscharf Sobald Transparenz verwendet wird, steht kein ClearType zur Verfügung Es gibt keine Optionen, um das zu steuern
Techniken für mehr Lesbarkeit von Schrift Ohne Tricks Anti-Aliasing Sub-Pixel Rendering Font-Hinting
TextFormattingMode TextOptions.TextFormattingMode=Ideal Ideale Position der Buchstaben (Default) TextOptions.TextFormattingMode=Display Buchstaben auf Pixel schieben
TextHintingMode Text wird während Animation unscharf Dies wurde für langsame Animationen gemacht. Font-Hinting wird in dieser Zeit ausgeschaltet TextOptions.TextHintingMode=Auto Wie in .NET 3.5. Text scharf, beim Animieren unscharf TextOptions.TextHintingMode=FixedText Font-Hinting ist immer aktiv TextOptions.TextHintingMode=AnimatedText Font-Hinting ist immer ausgeschaltet
TextRendering Mode Aliased GrayScale ClearType <TextBlock TextOptions.TextRenderingMode=Auto />
ClearTypeHint ClearType steht für IRTs nicht zur Verfügung: DrawingBrush VisualBrush Effects Opacity oder OpacityMask ViewPort2DVisual3D Layered Windows (transparent) Grund dafür ist eine Limitation von DirectX In .NET 4.0 kann man der Rendering Engine einen Tipp geben: RenderingOptions.ClearTypeHint=Enabled
Eigene Spell-Check Dictionaries Sprachen: Deutsch, Englisch, Französisch, Spanisch In WPF4 können zusätzliche Wörter hinzugefügt werden. <TextBox SpellCheck.IsEnabled="True" Language="en-US" /> <TextBox SpellCheck.IsEnabled="True" Language="en-US" > <SpellCheck.CustomDictionaries> <sys:Uri>C:\Temp\TechDays.lex</sys:Uri> </SpellCheck.CustomDictionaries> </TextBox> TechDays TechDays.lex
Bindable Runs Runs unterstützten nun {Bindings} für den Text <TextBlock TextWrapping="Wrap" Margin="8"> <Run Text="Herzlich Willkommen," /> <Run Text="{Binding Name}" /> <Run Text="zu den" /> <Run Text="{Binding Event}" /> </TextBlock>
Grafik & Rendering
Breaking Changes im Bereich Rendering Schnellere Image-Skalierung (Fant -> bi-linear) BitmapEffects sind jetzt no-ops Keine Hardware Unterstützung mehr für DirectX 7/8 Neue Definition für «Rendering Tier 1» Pixel Shader 2.0 Support und 60 Mbyte Video RAM
Unscharfe Elemente in WPF Images und Geometries werden unscharf dargestellt, wenn die Ecken nicht auf exakten Pixeln liegen SnapToDevicePixels hilft nicht immer, da es nur die Position ändert, nicht die Grösse
Layout Rounding Es ist eine Layoutfunktion, keine Grafikfunktion Demo Es ist eine Layoutfunktion, keine Grafikfunktion Ändert Position und Grösse, so dass die Elemene auf exakten Pixel Positionen liegen Wird vererbt, deshalb auf dem Root Element setzen Kompatibel zur Silverlight 4.0 API <Rectangle UseLayoutRounding="True" Canvas.Left="11.11" Canvas.Top="11.11" Width="20.22" Height="30.33" />
Pixel Shaders 3.0 Support Kein Software fallback, da viel Komplexer 2.0 -> 65 Instructions 3.0 -> 65535 Instructions Würde in Software viel zu lange rechnen! Expression Blend liefert 16 PixelShader Effects mit
Cached Composition Das Rastern von Vektor Grafiken nach Bitmaps ist aufwändig und langsam Caching eines VisualTrees in ein Bitmap steigert die Rendering Performance erheblich Nachteile: Braucht mehr Video Memory Effects können nicht gecached werden Der ganze Sub-Tree muss neu gezeichnet werden <Canvas.CacheMode> <BitmapCache RenderAtScale="4" EnableClearType="True" SnapsToDevicePixels="True" /> </Canvas.CacheMode>
Selection- and Caret-Brush Selection Brush Caret Brush <TextBox SelectionOpacity="0.4"> <TextBox.SelectionBrush> <LinearGradientBrush> <GradientStop Offset="0" Color="Green" /> <GradientStop Offset="1" Color="Blue" /> </LinearGradientBrush> </TextBox.SelectionBrush> </TextBox> <TextBox CaretBrush="Red" />
Data Binding
InputBinding unterstützt {Binding} InputBindings sind neu Freezables und unterstützen {Binding} KeyBinding MouseBinding <Window.InputBindings> <KeyBinding Key="F1" Command="{Binding HelpCommand}" /> </Window.InputBindings>
Binding – Value re-read Wird der Wert eines Properties nach dem Setzen geändert, wird er vom {Binding} neu gelesen <TextBox Text="{Binding Name}" /> public class Customer { private string _name; public string Name get { return _name; } set { _name = value.ToUpper(); } } Demo .NET 3.5 Demo .NET 4.0
Binding – SetCurrentValue() Der Aufruf von SetValue() überschreibt den lokalen Wert eines DependencyProperties Ein {Binding} ist im lokalen Wert gespeichert und wird dadurch auch überschrieben SetCurrentValue() überschreibt den Wert nur temporär, ein existierendes {Binding} bleibt dadurch erhalten. Demo
XBAP
Full Trust XBAP In .NET 3.5 erschien eine «Trust Not Granted» Exception, wenn man versuchte eine Full-Trust XBAP zu starten. Komplizierter Workaround mit Zertifikaten war möglich In .NET 4.0 erscheint ein Dialog, der die Rechte vom Benutzer anfragt
XBAP <-> HTML Interop XBAP Applikationen sind oft in einer HTML Seite eingebettet. Es ist deshalb ein normaler Use Case, dass man mit der umgebenden Seite interagieren möchte. In WPF 4 ist dies nun möglich dynamic hostScript = BrowserInteropHelper.HostScript; hostScript.ShowMessage("Hello"); function ShowMessage(text) { alert(text); }
Multi-Touch
Controls with integrated Touch Support Manipulation & Gesture Events Multi-Touch API Controls with integrated Touch Support Manipulation & Gesture Events Raw Touch Events
Touch-Enabled Controls Manipulation & Gesture Events Raw Touch Events Touch-Enabled Controls Manipulation & Gesture Events Raw Touch Events Touch.FrameReported += OnFrameReported; void OnFrameReported(object sender, TouchFrameEventArgs e) { var touchPoint = e.GetPrimaryTouchPoint(this); Point position = touchPoint.Position; Size touchSize = touchPoint.Size; }
Touch-Enabled Controls Manipulation & Gesture Events Manipulation Events Touch-Enabled Controls Manipulation & Gesture Events Raw Touch Events canvas.OnManipulationStarted += (s,e) => e.ManipulationContainer = canvas; Canvas private OnManipulationDelta(object sender EventArgs e) { } <Image IsManipulationEnabled=True />
Manipulation Events Starting Started Delta Inertia Starting Completed Touch Down (Initial) Touch Move Touch Up (All) Starting Started Delta Inertia Starting Completed Initialize: Mode Container Pivot StartInertia() StartInertia() Completed()
Manipulation Events - Intertia ManipulationInertiaStarting EventArgs Properties Units TranslationBehavior InitialVelocity 1/96th DIP per millisec DesiredDeceleration 1/96th DIP per millisec^2 DesiredDisplacement 1/96th DIP RotationBehavior Degrees per millisec Decrees per millisec^2 DesiredRotation Degrees ExpansionBehavior InitialRadius DesiredExpansion 1/96th DIPS
Touch-Enabled Controls Manipulation & Gesture Events Raw Touch Events <Canvas StylusSystemGesture="OnGesture" /> void OnGesture(object sender, StylusSystemGestureEventArgs e) { switch( e.SystemGesture ) case SystemGesture.Flick: break; case SystemGesture.Tap: }
Windows 7 Gestures
Windows 7 Gestures II
Touch-Enabled Controls Manipulation & Gesture Events Raw Touch Events ScrollViewer unterstützt neu Touch-Bedienung Weitere Control im Surface SDK frei verfügbar SurfaceButton SurfaceSlider SurfaceInkCanvas SurfaceCheckBox SurfaceListBox SurfaceScrollbar <ScrollViewer PanningMode="Both" PanningDeceleration="10" PanningRatio="20" /> Surface SDK Download Link
Neue Common Dialogs unter Vista/Win7 .NET 3.5 .NET 4.0
Windows 7 Taskbar Integration
Task Bar Features Thumbnail Thumb Buttons Icon Overlay Progress Indicator <Window.TaskbarItemInfo> <TaskbarItemInfo Overlay="images/stop.png" ThumbnailClipMargin="8" ProgressState="Normal" ProgressValue="50" Description="Taskbar Item Info Sample"> <TaskbarItemInfo.ThumbButtonInfos> <ThumbButtonInfoCollection> <ThumbButtonInfo DismissWhenClicked="False" Command="MediaCommands.Play" Description="Play" ImageSource="play.png"/> </ThumbButtonInfoCollection> </TaskbarItemInfo.ThumbButtonInfos> </TaskbarItemInfo> </Window.TaskbarItemInfo>
Task Bar Features II Jumplists <Application xmlns:s="clr-namespace:System.Windows.Shell;assembly=…"> <s:JumpList.JumpList> <s:JumpList ShowRecentCategory="True" ShowFrequentCategory="True"> <s:JumpTask Title="Notepad" Description="Launch Notepad" ApplicationPath="notepad.exe" WorkingDirectory="C:\temp" Arguments="ReleaseNotes.txt" IconResourcePath="notepad.exe"/> </s:JumpList> </s:JumpList.JumpList> </Application>
Deployment & Testing
New .NET 4.0 Client Profile Nur 30 MByte gross Presentation_title New .NET 4.0 Client Profile Nur 30 MByte gross Unterstützt neu alle Plattformen ab Windows XP Redistributable Version verfügbar Kann neu trotz vorhandenem .NET installiert werden neu zwei Einträge unter Software: «Client Profile» und «Extended» (upgrade to full) Bessere Unterstützung in Visual Studio 2010 dd/mm/yyyy, author_alias
Verbesserte UIAutomation ItemsContainerPattern für den Zugriff auf virtuelle Listen VirtualizedItemPattern zum Materialisieren von virtuellen Elementen SynchronizedInputPattern zum Feststellen, ob ein Event sein ZielElement erreicht hat
Visual Studio & Blend
Visual Studio 2010 – Cider Designer Interaktiver Designer für Silverlight Wizard zum automatischen Erstellen von Formularen von einer Datenquelle Support für mehrere .NET Versionen Einfacheres Layouten Layout von Grid / Control Sizing Editor für Brushes Bessererer Umgang mit App-Level {StaticResources}
Expression Blend 4 Preview Kann VisualStudio 2010 und 2008 Solutions öffnen Unterstützung für .NET 4.0 und Silverlight 4.0 Bessere Unterstützung für MVVM Pattern CallMethodAction InvokeCommandAction
WPF 4.0 – Viele spannende, neue Funktionen Presentation_title WPF 4.0 – Viele spannende, neue Funktionen XAML Parser Animation Easing Calendar DatePicker DataGrid XAML 2009 Chart Control Layout rounding Ribbon Text rendering Spell-Check Dictionaries Pixel Shaders 3.0 Cached Composition Visual State Manager Full Trust XBAP TaskBar Integration XBAP/HTML Interop .NET Client Profile Windows 7 API Jumplists Custom ClickOnce UI DataBinding für InputBindings Virtual UI Automation Multitouch Common Dialogs Visual Studio 2010 dd/mm/yyyy, author_alias
Weitere Informationen Blog: www.wpftutorial.net Mail: moc@zuehlke.com Twitter: @moser_christian
Presentation_title dd/mm/yyyy, author_alias