Upload
ernust-reichwein
View
105
Download
2
Embed Size (px)
Citation preview
Wettbewerbstalon ausfüllen und
tolle Preise gewinnen!
Nicht vergessen!
Ziehung heute Abend 19:45 und 20:45 Uhr
Stempel bei Partner holen und einwerfen!
Christian MoserZühlke [email protected]
Die neuen Features im Überblick
WindowsPresentation Foundation 4.0
WPF 4.0 – Viele spannende, neue Funktionen
Windows 7 API
Full Trust XBAPXBAP/HTML Interop
.NET Client Profile
Custom ClickOnce UI
Layout rounding
XAML 2009
XAML Parser
Text rendering
DataGrid
Visual State Manager
Chart Control
Calendar DatePicker
Ribbon
TaskBar Integration
Jumplists
MultitouchCommon Dialogs
Virtual UI Automation
Visual Studio 2010
Spell-Check Dictionaries
Cached Composition
Animation Easing
Pixel Shaders 3.0
DataBinding für InputBindings
Ausbesserung von SchwachpunktenInterne KonsolidierungWünsche der Community abdeckenProduktivität der Entwickler erhöhenBessere Controls für LoB ApplikationenModernisierung der APIBessere Kompatibilität mit Microsoft Silverlight
Ziele von Microsoft für WPF 4.0
WPF Roadmap
2007 2008 2009 2010
Silverlight 1 Silverlight 3
Silverlight 2 Silverlight 4
WPF 3.0
WPF 3.5
WPF 3.5 SP1
WPF 4.0
WPF Toolkit 1 DataGrid DatePicker
WPF Toolkit 2 VSM Chart WPFToolkit 3
Theme Pack AutoCompleteBox
Accordion
SL Toolkit 1 TreeView DockPanel WrapPanel
SL Toolkit 2 Accordion TimePicker Chart
Nächsten Montag 12 April 2010
4.0
<XAML />
WindowsBase
Ein neuer XAML Stack für alles
PresentationCore
PresentationFramework
BAMLEngine
XAML Type Info
WCF / WF
XAMLEngine
XOMLEngine
XOMLType Info
.NET 3.5
mscorlib System System.Xml
.NET 4.0
WindowsBase
PresentationCore
PresentationFrameworkWCF / WF
BAMLEngine
System.Xaml.dllXAML Type Info
XAML Engine
mscorlib System System.Xml
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}
Neue Sprachkonstrukte in XAML 2009
Bessere PerformanceViele BugFixesKonsistenz zu WCF und WFAPI zum Laden und Schreiben von XAMLSpäter: Auch für Silverlight
Neuer XAML Parser
XAML Object Model: O-M-V + Types
<StackPanel>
<Button x:Name="button" Click="foo" Content="Test" />
<Button>Test</Button>
<Button>
<Button.Content>Test</Button.Content>
</Button>
</StackPanel>
MembersProperties
EventsDirectives
(x:Key)
ValuesObjectsRoot
ObjectCollection
Xaml TypesXaml <->
ObjectUmsetzungs-Beschreibung
XAML Node Stream Processing
EndObjectButton
EndMemberContent
Value«Test»
StartMemberContent
StartObjectButton
XamlType
XamlMember
whilereader.read()
XamlXmlReader.Read()
XamlObjectWriter.Write()
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) continue; break; } writer.WriteNode(reader);}
Beispiel «Robust XamlLoader»
XAMLNode Pump
...aber
mscorlib System System.Xml
WindowsBase
PresentationCore
PresentationFrameworkWCF / WF
BAMLEngine
System.Xaml.dllXAML Type Info
XAML Engine
VS2010MarkupCompile
r
x x
MarkupCompiler und Designer von VS2010 und Blend unterstützen diese Features noch nicht!
Nur für Loose XAML...
XamlDomObject rootObject = XamlDomServices.Load("Window1.xaml");
foreach (XamlDomObject domObject in rootObject.DescendantsAndSelf()) { Console.WriteLine(domObject.Type); }
Neu Verfügbar: Microsoft XAML ToolkitVollständige XAML DOM APIXAML FxCop integration SilverlightSchemaContext to parse Silverlight XAML using System.Xaml
Weitere InformationenPDC 2008 – XAML 2009http://channel9.msdn.com/pdc2008/TL36 PDC 2009 - XAML Futureshttp://microsoftpdc.com/Sessions/CL24Blog von Rob Relyea (XAML Architekt)http://blogs.windowsclient.net/rob_relyea XAML Toolkithttp://michaelshim.com/blog/2009/11/19/xaml-toolkit-ctp/
New Controls
FeaturesAuto generation of columnsSelection of cells and rowsGrouping and filteringFrozen columnsColumn sorting, reordering and resizing Row detailsFlexible Styling
DataGrid Control
Demo
Calendar and DatePicker Control
FeaturesMultiple selection modesBlackout DatesLimitation of displayed date rangeDisplayModes for Month, Year and Decade
Demo
Chart Control – WPF Toolkit
Ribbon Control – CTP Preview
FeaturesSpecial Ribbon WindowAll Features of Office 2010Office 2007 und 2010 Themes
Aber: - Release erst nach .NET 4.0 - Etwas MVVM unfreundliche API
Styling
States von Controls
Disabled Normal Mouseover Pressed
Unfocused
Focused
<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> <Trigger Property="IsEnabled" Value="False"> <Setter Property="Background" Value="Gray" /> </Trigger> </Style.Triggers></Style>
Umsetzung in .NET 3.5
Steuert die Zustände und Übergänge von ControlsVerwendet dazu StoryboardsKompatibel zu SilverlightWechsel zwischen States nur aus Code
Internal VisualStateManager.GotoState()External VisualStateManager.GoToElementState()
Der Visual State Manager
Control
VisualState
Manager
<Border> <VisualStateManager.VisualStateGroups> <VisualStateGroup x:Name="TrafficStates">
<VisualState x:Name="Red"> <Storyboard> <ColorAnimationUsingKeyFrames …> <EasingColorKeyFrame Value="Red"/> </ColorAnimationUsingKeyFrames> </Storyboard> </VisualState>
<VisualState x:Name="Yellow"> <Storyboard> <ColorAnimationUsingKeyFrames …> <EasingColorKeyFrame Value="Yellow"/> </ColorAnimationUsingKeyFrames> </Storyboard> </VisualState>
<VisualState x:Name="Green"> <Storyboard> <ColorAnimationUsingKeyFrames …> <EasingColorKeyFrame Value="Green"/> </ColorAnimationUsingKeyFrames> </Storyboard> </VisualState>
</VisualStateGroup> </VisualStateManager.VisualStateGroups></Border>
Visual State Manager in XAML
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 XAMLVerwendung der GoToStateAction aus System.Windows.Interactivity
Demo
[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); break; case TrafficLight.Red: VisualStateManager.GoToState(this, "Red", true); break; } }}
Steuern von States aus dem Code
Designer Support in Expression Blend
Machen Animationen «natürlicher»Verwendung spezieller EasingKeyFrames die eine EasingFunction verwenden
Animation Easing
<DoubleAnimationUsingKeyFrames … ><EasingDoubleKeyFrame KeyTime="0:0:3"
Value="370"><EasingDoubleKeyFrame.EasingFunction>
<BounceEase EasingMode="EaseOut"/>
</EasingDoubleKeyFrame.EasingFunction></EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames … ><DoubleKeyFrame KeyTime="0:0:3" Value="370“ />
</DoubleAnimationUsingKeyFrames>
Animation Easing Functions
Demo
WPF 4.0 bringt bereits viele EasingFunctions mit
Animation Easing in Expression BlendExpression Blend 4 bietet eine sehr konfortable Unterstützung für Animation Easing
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(); }}
Eigene Easing Functions implementieren
Schrift in WPF
Kleine Zeichen sind schlecht lesbarSchrift wird beim Animieren unscharfSobald Transparenz verwendet wird, steht kein ClearType zur VerfügungEs gibt keine Optionen, um das zu steuern
Probleme mit Schrift in .NET 3.5
Techniken für mehr Lesbarkeit von Schrift
Ohne Tricks
Anti-Aliasing
Sub-Pixel Rendering
Font-Hinting
TextOptions.TextFormattingMode=IdealIdeale Position der Buchstaben (Default)
TextOptions.TextFormattingMode=DisplayBuchstaben auf Pixel schieben
TextFormattingMode
Text wird während Animation unscharfDies wurde für langsame Animationen gemacht.Font-Hinting wird in dieser Zeit ausgeschaltet
TextOptions.TextHintingMode=AutoWie in .NET 3.5. Text scharf, beim Animieren unscharfTextOptions.TextHintingMode=FixedTextFont-Hinting ist immer aktivTextOptions.TextHintingMode=AnimatedTextFont-Hinting ist immer ausgeschaltet
TextHintingMode
<TextBlock TextOptions.TextRenderingMode=Auto />
TextRendering Mode
Aliased
GrayScale
ClearType
ClearType steht für IRTs nicht zur Verfügung:DrawingBrushVisualBrush EffectsOpacity oder OpacityMaskViewPort2DVisual3DLayered Windows (transparent)
Grund dafür ist eine Limitation von DirectXIn .NET 4.0 kann man der Rendering Engine einen Tipp geben: RenderingOptions.ClearTypeHint=Enabled
ClearTypeHint
Eigene Spell-Check DictionariesSprachen: Deutsch, Englisch, Französisch, SpanischIn WPF4 können zusätzliche Wörter hinzugefügt werden.
<TextBox SpellCheck.IsEnabled="True" Language="en-US" > <SpellCheck.CustomDictionaries> <sys:Uri>C:\Temp\TechDays.lex</sys:Uri> </SpellCheck.CustomDictionaries></TextBox>
<TextBox SpellCheck.IsEnabled="True" Language="en-US" />
TechDays
TechDays.lex
Bindable Runs
<TextBlock TextWrapping="Wrap" Margin="8"> <Run Text="Herzlich Willkommen," /> <Run Text="{Binding Name}" /> <Run Text="zu den" /> <Run Text="{Binding Event}" /></TextBlock>
Runs unterstützten nun {Bindings} für den Text
Grafik & Rendering
Schnellere Image-Skalierung (Fant -> bi-linear)BitmapEffects sind jetzt no-opsKeine Hardware Unterstützung mehr für DirectX 7/8Neue Definition für «Rendering Tier 1»
Pixel Shader 2.0 Support und 60 Mbyte Video RAM
Breaking Changes im Bereich Rendering
Images und Geometries werden unscharf dargestellt, wenn die Ecken nicht auf exakten Pixeln liegenSnapToDevicePixels hilft nicht immer, da es nur die Position ändert, nicht die Grösse
Unscharfe Elemente in WPF
Es ist eine Layoutfunktion, keine GrafikfunktionÄndert Position und Grösse, so dass die Elemene auf exakten Pixel Positionen liegenWird vererbt, deshalb auf dem Root Element setzenKompatibel zur Silverlight 4.0 API
Layout Rounding Demo
<Rectangle UseLayoutRounding="True" Canvas.Left="11.11" Canvas.Top="11.11" Width="20.22" Height="30.33" />
Kein Software fallback, da viel Komplexer2.0 -> 65 Instructions 3.0 -> 65535 InstructionsWürde in Software viel zu lange rechnen!
Expression Blend liefert 16 PixelShader Effects mit
Pixel Shaders 3.0 Support
Das Rastern von Vektor Grafiken nach Bitmaps ist aufwändig und langsamCaching eines VisualTrees in ein Bitmap steigert die Rendering Performance erheblichNachteile:
Braucht mehr Video MemoryEffects können nicht gecached werdenDer ganze Sub-Tree muss neu gezeichnet werden
Cached Composition
<Canvas.CacheMode> <BitmapCache RenderAtScale="4" EnableClearType="True" SnapsToDevicePixels="True" /></Canvas.CacheMode>
Selection- and 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" />
Selection Brush Caret Brush
Data Binding
InputBindings sind neu Freezables und unterstützen {Binding}
KeyBindingMouseBinding
InputBinding unterstützt {Binding}
<Window.InputBindings> <KeyBinding Key="F1" Command="{Binding HelpCommand}" /></Window.InputBindings>
Wird der Wert eines Properties nach dem Setzen geändert, wird er vom {Binding} neu gelesen
Binding – Value re-read
Demo .NET 3.5
Demo .NET 4.0
<TextBox Text="{Binding Name}" />public class Customer{ private string _name; public string Name { get { return _name; } set { _name = value.ToUpper(); } }}
Der Aufruf von SetValue() überschreibt den lokalen Wert eines DependencyPropertiesEin {Binding} ist im lokalen Wert gespeichert und wird dadurch auch überschrieben SetCurrentValue() überschreibt den Wert nur temporär, ein existierendes {Binding} bleibt dadurch erhalten.
Binding – SetCurrentValue()
Demo
XBAP
Full Trust XBAPIn .NET 3.5 erschien eine «Trust Not Granted» Exception, wenn man versuchte eine Full-Trust XBAP zu starten.Komplizierter Workaround mit Zertifikaten war möglichIn .NET 4.0 erscheint ein Dialog, der die Rechte vom Benutzer anfragt
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
XBAP <-> HTML Interop
dynamic hostScript = BrowserInteropHelper.HostScript;hostScript.ShowMessage("Hello");
function ShowMessage(text){ alert(text);}
Multi-Touch
Multi-Touch API
Controls with integrated Touch Support
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;}
Raw Touch Events Touch-Enabled Controls
Manipulation & Gesture Events
Raw Touch Events
Manipulation Events
Canvas canvas.OnManipulationStarted += (s,e) => e.ManipulationContainer = canvas;
<Image IsManipulationEnabled=True />
private OnManipulationDelta(object sender EventArgs e){}
Touch-Enabled Controls
Manipulation & Gesture Events
Raw Touch Events
Manipulation Events
Starting Started Delta Inertia Starting Delta Complete
d
StartInertia() StartInertia()
Touch Down
(Initial)
Touch Move
Touch Up (All)
Initialize:• Mode• Container
• PivotCompleted()
Manipulation Events - Intertia
ManipulationInertiaStartingEventArgs
Properties Units
TranslationBehavior InitialVelocity 1/96th DIP per millisec
DesiredDeceleration 1/96th DIP per millisec^2
DesiredDisplacement 1/96th DIP
RotationBehavior InitialVelocity Degrees per millisec
DesiredDeceleration Decrees per millisec^2
DesiredRotation Degrees
ExpansionBehavior InitialVelocity 1/96th DIP per millisec
InitialRadius 1/96th DIP
DesiredDeceleration 1/96th DIP per millisec^2
DesiredExpansion 1/96th DIPS
Gesture Events
void OnGesture(object sender, StylusSystemGestureEventArgs e){ switch( e.SystemGesture ) { case SystemGesture.Flick: break; case SystemGesture.Tap: break; }}
<Canvas StylusSystemGesture="OnGesture" />
Touch-Enabled Controls
Manipulation & Gesture Events
Raw Touch Events
Windows 7 Gestures
Windows 7 Gestures II
ScrollViewer unterstützt neu Touch-Bedienung
Weitere Control im Surface SDK frei verfügbarSurfaceButton SurfaceSliderSurfaceInkCanvas SurfaceCheckBoxSurfaceListBox SurfaceScrollbar
Touch-Enabled Controls
<ScrollViewer PanningMode="Both" PanningDeceleration="10" PanningRatio="20" />
Surface SDK Download Link
Touch-Enabled Controls
Manipulation & Gesture Events
Raw Touch Events
Neue Common Dialogs unter Vista/Win7
.NET 3.5 .NET 4.0
Windows 7 Taskbar Integration
Task Bar Features
<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>
ThumbnailThumb ButtonsIcon OverlayProgress Indicator
Jumplists
Task Bar Features II
<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
Nur 30 MByte grossUnterstützt neu alle Plattformen ab Windows XPRedistributable Version verfügbarKann 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
New .NET 4.0 Client Profile
Verbesserte UIAutomation
ItemsContainerPattern für den Zugriff auf virtuelle ListenVirtualizedItemPattern zum Materialisieren von virtuellen ElementenSynchronizedInputPattern zum Feststellen, ob ein Event sein ZielElement erreicht hat
Visual Studio & Blend
Interaktiver Designer für SilverlightWizard zum automatischen Erstellen von Formularen von einer DatenquelleSupport für mehrere .NET VersionenEinfacheres Layouten Layout von Grid / Control SizingEditor für BrushesBessererer Umgang mit App-Level {StaticResources}
Visual Studio 2010 – Cider Designer
Kann VisualStudio 2010 und 2008 Solutions öffnenUnterstützung für .NET 4.0 und Silverlight 4.0Bessere Unterstützung für MVVM Pattern
CallMethodActionInvokeCommandAction
Expression Blend 4 Preview
WPF 4.0 – Viele spannende, neue Funktionen
Windows 7 API
Full Trust XBAPXBAP/HTML Interop
.NET Client Profile
Custom ClickOnce UI
Layout rounding
XAML 2009
XAML Parser
Text rendering
DataGrid
Visual State Manager
Chart Control
Calendar DatePicker
Ribbon
TaskBar Integration
Jumplists
MultitouchCommon Dialogs
Virtual UI Automation
Visual Studio 2010
Spell-Check Dictionaries
Cached Composition
Animation Easing
Pixel Shaders 3.0
DataBinding für InputBindings
Weitere InformationenBlog: www.wpftutorial.netMail: [email protected]: @moser_christian