Web- und Software Development

Neues in WPF 4

Written By: Mario Priebe - Mrz• 12•10

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:


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

  • UseLayoutRounding=”true” (erbt von FrameworkElement)
  • Vererbbar
  • In Silverlight default

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)

Ähnliche Beiträge

You can follow any responses to this entry through the RSS 2.0 feed. Both comments and pings are currently closed.