Ich hab kürzlich die BASTA Spring 2010 besucht (über 500 Teilnehmer). Es war wirklich eine sehr informative Veranstaltung über aktuelle Entwicklungen im .NET Bereich. Folgender Abriss soll die Neuerungen im .NET Framework 4.0, Entity Framework 2, VisualStudio 2010, WPF 4 und Silverlight 4, aufzeigen.
Im folgenden Artikel möchte ich über einige Neuerungen in WPF 4.0 schreiben
Visual StateManager
Verbessertes Management von States und Transitions, das Aussehen wird durch VisualStates repräsentiert. Ein VisualState enthält eine Liste von StoryBoard-Objekten, welche beschreiben wie sich ein Element verändert.
- Methoden im VSM: GoToElementState (ohne ControlElement), GoToState (mit ControlTemplate)
- Ersetzt, bzw vereinfacht Trigger
- Von Silverlight übernommen, somit kompatibel
- In Blend 3 verfügbar
Quelle:
Neue WPF Tools
Die neuen WPF Tools stammen aus dem WPF Toolkit und wurden in der WPF 4.0 übernommen. Dieses sollen 99% kompatibel zu Silverlight sein.
- Datagrid
- Unterstützt Validierung für Zellen und Zeilen
- DatePicker
- Calendar
- Anzeige kann mit DisplayMode verändert werden
- (Größe kann nur über Transformer verändert werden)
Multitouch
Toucheingaben werden unterstützt
- MultiTouch Events für UIElement, UIElement3D und ContentElement über IsManipulationEnabled
- TouchDown
- TouchMove
- TouchUp
- TouchEnter
- TouchLeave
- GetTouchPoint (Returns the current position of the touch device relative to specified element)
- TouchDevice (Get the device, that generated the event)
- Device (Gets the input device the initiated thid event – inherited from InputEventArgs)
- IsManipulationEnabled:
- ManipulationStarted
- ManipulationDelta
- ManipulationStarting
- ManipulationComplited
UIElement unterstützt auch Expansion, Scale, Rotation, Translation (ManipulationStarted, ManipulationDelta,…)
Quellen:
- http://blogs.msdn.com/jaimer/
- http://blogs.msdn.com/llobo/archive/2009/11/24/new-wpf-features-multitouch.aspx
Grafik und Animation in WPF
Pixel Shader 3 Support
- BitmapEffect-Property -> obsolete
- Neu: Effect-Property
- .NET 3.5 unterstützt bis Version 2.0
1 2 3 | RenderCapability.IsPixelShaderVersionSupported(majorversion,minorVersion) RenderCapability. IsPixelShaderVersionSupportedlnSoftware (majorversion,minorVersion) RenderCapability. MaxPixelShaderlnstructionSlots(majorversion,minorVersion) |
Layout-Rounding
Quellen:
ClearTypeHint
Soll das TextRendering erheblich verbessern, in Silverlight 3 wird ClearTypeHint offiziell schon unterstützt. Hierzu muss die Property RenderOptions.ClearTypeHint auf Enabled gestellt werden.
Durch verschiedene Beeinflussung kann die Property den Status verlieren (Effect, OpacityMask, VisualBrush, DrawingBrush, Clip, and Opacity) Kann aber dann aber wieder enabled werden. Folgende mögliche Ausnahmen sollen das verdeutlichen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <Window AllowsTransparency="True" WindowStyle="None" RenderOptions.ClearTypeHint="Enabled"> <StackPanel> <TextBlock Name="Block1">This text will be rendered with ClearType.</TextBlock> <TextBlock Opacity="0.9" Nane="Block2" >This text will be rendered with NO ClearType (note the opacity Prop)./> <Grid Height="l00" Background="White"> <Grid.Clip> <Ellipse3eometry RadiusX="300" RadiusY="200" Center="150, 120" /> </Grid.Clip> <Grid. RowDefinitions> <RowDefinition /> </Grid.RowDefinition> <TextBlock Name="Block3">This text will be rendered with NO ClearType . </TextBlock> <TextBlock Name="Block4" Grid.Row="1" RenderOptions.ClearTypeMint="Enabled">This text will be rendered with ClearType</TextBlock> </Grid> <TextBlock Name="Block5">This text will be rendered with ClearType.</TextBlock> </StackPanel> </Window> |
Here the values are set as per the hierarchy
- Window -> hint enabled
- StackPanel -> inherits Hint (cleartype)
- Blockl -> inherits Hint (cleartype)
- Block2 -> overrides Hint because of Opacity [intermediate rendertarget]
- Grid -> overrides Hint because of Clip [intermediate rendertarget]
- Block3 -> Inherits Grid‘s hint (No cleartype)
- Block4 -> overrides Hint to enabled (Cleartype)
Quellen:
Cached Composition
Spezieller Videospeicher, der das aktuelle Objekt vorhalten kann. Unterstützt somit das Manipulieren ohne neu zu Rendern. (GPU rendert aus dem Cache und entlastet die CPU)
- Bessere Performance
- CacheModeProperty BitmapCache muss aktiviert werden
- Vererbbar
1 2 3 4 5 6 | <Canvas> <Canvas.CacheMode> <BitmapCache EnableClearType="False" RenderAtScale="2" /> </Canvas.CacheMode> <Canvas.CacheMode="BitmapCache" /> </Canvas> |
Text Rendering Stack
Klarerer, sauberer Text. Soll die Schärfe von Win32/GDI entsprechen
- ClearType
- GrayScale
- Aliased
Text Formatting Mode
Bisher war es so, das klein skalierter Text nicht anständig gerendert wurde. Mit TextOptions.TextFormattingMode kann man hier nachhelfen
1 2 | <TextBox TextOptions.TextFormattingMode="Ideal" FontSize="15" Text="Hello World" /> <TextBox TextOptions.TextFormattingMode="Display" FontSize="15" Text="Hello World" /> |
Animation Easing Functions
- Dieses Feature wurde aus Silverlight 3 übernommen und kann in wenigen Schritten eine Animation auf ein Element abspielen
- In WPF wurden zuvor Trigger anstelle dessen verwendet.
- Somit sind auch die Animationen ab WPF 4.0 zu Silverlight kompatibel
- Verfügbar auch in Expression Blend unter -> WorkSpaces/Animation, in Klick in der Timeline auf Effekt, gibt die Auswahl zu Easy Functions
Selection Brush (Caret Brush)
Beeinflusst den Hintergrund von markierten Text
1 2 3 | SelectionBrush="RED" Selectionopacity="O.3" (Default value is 0.6) CaretBrush="Red" |
Binding in WPF 4.0
Unterstützung von dynamischen Objekten (DynamcObject, IDynamicMetaObjectProvider)
Bindable Run
- Im RichTextEditor ist die Dependency Property RUN nun bindable
1 2 3 4 5 6 7 8 9 | <FlowDocumentReader> <FlowDocument> <Paragraph> <Run>Sample Text Beginning:</Run> <Run Text="{Binding ElementName='tbl' ‚ Path=Text" /> <Run>End of sample text.</Run> </Paragraph> </FlowDocument> </FlowDocumentReader> |
Quellen:
Binding to dynamic objects
Ermöglich das Binden an einen dynamischen Typen
1 2 3 4 5 6 | dynamic dynamicObj = BindPanel.DataContext ; dynamicObj.A = "Simple Binding"; dynamicObj.B = new DynamicObjectClass(); dynamicObj.B.C = "Nested Prop Binding"; dynamicObj.Addltem("item 0"); dynamicObj[0] = "Indexer Binding"; |
1 2 3 4 5 6 7 8 | <Window.Resources> <local:DynamicObjectClass x:Key="MyDynamicObject" /> </Window.Resources> <StackPanel Name="BindPanel" DataContext="{StaticResource MyDynamicObject}"> <TextBoxText="{Binding Path=A}" /> <TextBlock Text="{Binding Path=B.C}" /> <TextBox Text{Binding Path=[(x:int32)0)}" /> |
Custom Speller Dictionary
Ermöglicht anhand von eigenen Dictionaries eine Rechtschreibprüfung
1 2 3 4 5 6 7 8 9 10 | <RichTextBox FontSize="24" SpellCheck.IsEnabled="true" > <SpellCheck.CustomDictionaries> <sys:Uri>Dictionary1.lex</sys Uri> <sys1:Uri>\\dictServer\Dictionary3.txt</sys1:Uri> </SpellCheck.CustomDictionaries> <FlowDocument> <Paragraph>Some Names: Max Musterman</Paragraph> <Paragraph>Misspelled: Max Mustermann</Paragrap> </FlowDocument> </RichTextBox> |
Windows7 API
- System.Windows.Shell – TaskBar
- Ist das OS < Windows7, wird keine Exception ausgelöst
- Einfacher Verwendung in Xaml
- Window.TaskBarItemInfo
- Overlay
- ProgressState, ProgressValue
- Xaml ThumbButtonInfo
- Application.xaml Jumplist JumpTask !!
1 2 3 4 | <Window.TaskbarItemInfo> <TaskbarItemlnfo Description="My TaskbarItemInfo Overlay="..\Resources\powerButton.ico> <TaskbarItemlnfo.ThumbButtonInfos> <ThumbButtonInfos Command="Cut" CommandTarget="{Binding Elementname=textBox} Description="(Binding RelativeSource={RelativeSource Self), Path=Command.Text}" DismissWhenClicked="False" ImageSource="..\Resources\cut.png" /> |
XBAP Script Interop / Full Trust XBAP Deployment
Via Assemblyeinstellung ist es möglich aus der Sandbox heraus zu kommen und auf das System zuzugreifen. Applikationen wie Excel lassen sich so aus XBAP heraus öffnen und bearbeiten.
FileDialog Update
In der vorherigen Version, sah das Design der DialogBox unter XP und Vista unterschiedlich aus. Durch einige Workarounds konnte man das abgleichen. In der Version 4.0 wurde dieses Problem nun behoben.
XAML Neuerungen
- x:Arguments
- x:FactoryMethod
- x:Reference (anstatt Binding ElementName)













