List of features to track in WPF4 and the details on beta1

I am late to this  but still wanted to share an “insider view” into the status of “WPF 4” in the recently released .NET Framework 4 and VS 2010  beta1.

Status of the run-time (on the public beta 1).
The WPF team cranked hard until last minute on 3.5 SP1 so they have been playing catch-up to .NET 4 and VS2010.  The beta does not really do justice to the progress the team is making towards RTM. In a few cases, the team ‘compromised’ not shipping the feature in beta1 to optimize for the RTM schedule (preparing a beta does take integration work and testing, plus they had to put the longer/harder features up-front to decrease ship risks). 
Beta2 appears to be in good shape for you to preview and share feedback still before .NET 4 RTMs.  

For those looking into beta1, I would say the two areas where we need feedback will be:

  • The new XAML stuff (in particular we want to make sure we do not break you)
  • The tools ( Cider designer); I would love to hear what people think of the new features.  

Want to learn more about beta1. Here is a bit of the action:

  • Video Interview with Ian Ellison Taylor WPF and Silverlight GM, and Kevin Gjerstad, WPF Group Program Manager.  It pretty much discusses what is in and out (for beta1 and RTM).
  • Rob Relyea recorded a video on the XAML enhancements.  This is a must watch and then follow it with this post and any other recent posts in Rob’s blog.
  • Jossef Goldberg has a great post on client profile in .NET4.  We recorded a video, to be posted in the next few days; look for it here via update to this post, or in the continuum show.
  • Tomorrow we are shooting the Touch video;  ironically they reached feature complete in beta2 today, maybe we can get a peek; video should be posted early next week. 
    [If you want to know why I am posting today instead of next week, we are doing LOB Tour in NY this weekend, so I am out on the road again. I hope you understand, post will be updated as we go]
  • WindowsClient.net now has a new section for the Cider designer. Karl Shifflett and the Cider crew will be putting videos there as they go. For starters, Mark Wilson-Thomas has a good “Lap Around Cider in beta1 .  

On the way to .NET 4.
Here is my view into the new features I am tracking and current (best guess) estimate on timelines. The list is not all inclusive, so let me know if I missed one you cared about.  note that this list focuses on new stuff;  I did not include all the bug fixes and minor improvements to existing stuff.

Huge WARNING!! None of the below features are guaranteed. Nothing is official until we RTM.
Please do not make assumptions or plans based on this list.

Category

Feature

In beta 1

Expected by beta 2

Windows 7 light-up

     
Multi-Touch Basic manipulation and inertia. Raw touch events are not in. Yes. Beta1 + Raw touch. A few tiny breaking changes.
  Taskbar integration Not in beta 1 Yes
  Vista + Win7 Native Dialogs Yes Same as beta1
  Ribbon (though it is not win7 specific at all). Not in beta 1 Ribbon will be shipping out of band still.  Next preview ships after beta2. It will RTM by .NET 4 RTM or earlier.
    Graphics& Text      
  Text enhancements Not in beta 1 Yes
  Cached Composition Not in beta1 Yes
  Support for Pixel Shaders written w/ HLSL 3.0 Not in beta 1 Yes
  Caret customization Not in beta 1 Yes
  ClearTypeHint Yes Same as beta1
Legacy effects get cut Yes. Old legacy Bitmapeffects are a no-op, unless it is one of the effects that are hardware accelerated. Same as beta1
Fundamentals & AppModel      
  XAML 2009 Beta1 Yes, minor changes.
  LayoutRounding Not in beta1 Yes
  Bindable Run Not in beta1 Yes
  Visual State Manager Not in beta1. In by beta2, now shipping in the framework.
  Animation Easing functions Yes Same as beta 1
  Datagrid Yes. Moved from toolkit to framework. Minor bug fixes. Same as beta 1.
DatePicker Move from toolkit to framework. Minor fixes. Same as beta1.
  Full Trust XBAP Not in beta1 Yes
  Databinding improvements Not in beta1. Yes
     Deployment
Client Profile New client profile is in, but no web bootstrapper. Still needs to be compressed (for size). Yes, full functionality.
  Client Profile Configurator No. Will ship out of band. No. Will ship out of band.
          Tools      
  VS2010 Cider Cider has a lot of improvements. Perf work is not done. Yes.
VS2010 new Editor Since the text enhancements are not in the run-time, the editor does not get them. Yes.
       

Note: At PDC, we said that DeepZoom would be in WPF4. Unfortunately that feature has been cut. We just could not squeeze it into the schedule.  There are workarounds to it: you can host Silverlight inWPF using web browser control or using the Silverlight hosting APIs.
 

Details on the features:
Below are high level descriptions around the features listed above. Must share that Ted Hu created the descriptions for a different document and I am shamelessly plagiarizing it. Thanks Ted.

Multi-touch
Windows 7 is introducing multi-touch input and manipulation processing, which Windows Presentation Foundation exposes. Multiple finger input will be exposed through existing and new input events, while new manipulation and inertia events will be exposed for developers to consume.

  • Multi-touch Manipulation and Inertia (Pan, Zoom, Rotate) events on UIElement
  • Raw Multi-touch events (Up, Move, Down) on UIElement, UIElement3D and ContentElement
  • Multiple capture supporting multiple active controls
  • ScrollViewer enhancement to support multi-touch pannning
  • Touch device extensibility
  • Future Surface SDK compatibility

Windows 7 Shell Integration
WPF 4 exposes several new Windows 7 Shell features to WPF developers These Shell features empower application authors to provide a richer, integrated user experience. The new taskbar is less cluttered and can convey more information at a glance. The Aero thumbnails support user commands. Jump lists provide access to contextual startup tasks and files available to the application.
WPF 4 will integrate Windows 7 JumpList functionality, including:

  • Tasks
  • Items
  • Recent and Frequent Lists integration
  • Custom Categories

Taskbar integration including:

  • Progress bar
  • Overlay Icon
  • Thumbnail buttons with commanding support
  • Description Text
  • DWM Thumbnail clipping

Text enhancements
WPF 4.0 Beta 2 introduces a new text rendering stack which allows for much clearer text rendering.  This change adds the necessary knobs to allow WPF text to look virtually indistinguishable from Windows’ traditional GDI-rendered text.  The clarity improvements also dramatically improve readability for many East Asian languages.

 

 

ClearType hint
ClearTypeHint allows app authors to enable cleartype when rendering text to IntermediateRenderTargets, where it would normally be disabled by the system.  The system normally disables cleartype on IRTs because Cleartype only works properly when it’s rendered to an opaque surface, and it’s extremely difficult for the system to determine if an IRT will be rendered with transparency.  By Setting this to true, you’re basically letting the system know that the IRT is transparent.  This means you can now enable cleartype with layered windows, in Visual/Drawing brushes, in Effects, and in 3D if you so desired it. 

Full-Trust XBAP
Starting in WPF 4.0, the ClickOnce elevation prompt is enabled for XAML Browser Applications (XBAPs) in Intranet and Trusted Zones, making it easier to deploy full-trust XBAPs. For XBAPs that require security permissions greater than the minimum code access security (CAS) permission grantset of the Intranet and Trusted Zones, the user will be able to click 'Run' on the ClickOnce elevation prompt when they navigate to the XBAP to allow the XBAP to run with the requested permissions.

LayoutRounding
WPF 4.0 will adopt the LayoutRounding property, originally introduced in Silverlight2. WPF’s layout engine frequently calculates sub-pixel positioning coordinates. This can lead to rendering artifacts as elements positioned on sub-pixel boundaries are antialiased over multiple physical pixels. LayoutRounding will force the layout engine to place elements on whole pixel boundaries, thus removing most of the rendering artifacts caused by this problem.

Bindable Run
The Run class has had a simple CLR property Text since the first release of the framework. In WPF 4.0 we have backed Run.Text with a dependency property. Among the many benefits of being a DP, Run.Text now supports data binding. One-way binding (from data source to Run.Text) is fully supported, and two-way binding is supported as long as the Run is not modified via the Text OM or from a RichTextBox.

Selection and caret customization
Simple app customization is a great WPF strength. In the past, the selection color and caret color for text input and reading controls (TextBox, RichTextBox, FlowDocumentReader, etc...) has been hard coded. WPF 4.0 will introduce the SelectionBrush and CaretBrush properties. These properties will allow developers to control the brush used to draw both selection and carets in many WPF controls.

Animation Easing functions
Is the exact same functions we announced in Silverlight 3;  I can not tell you who created them first; funny how schedules work; but really nice to have compatibility.

BindingExpressionBase.ValidateWithoutUpdate does for a single binding expression what BindingGroup.ValidateWithoutUpdate does for a binding group – namely it starts the validate/update process but stops just before writing a value back to the source item

When BindingGroup.SharesProposedValues is true, the binding group will keep track of proposed values even when the UI elements that hold them are replaced.  This supports a UI design pattern used by DataGrid (for example), where only one source property is presented with an “editing template” (containing editable controls – TextBox) while the other properties are presented with “display templates” (containing non-editable controls – TextBlock).   As the user focuses a new property, its display template is replaced by an editing template, while the previously focused property’s editing template is replaced by a display template.  The BindingGroup now manages the proposed value (if any) held by the old editing template, so that it can be displayed (if possible) in the display template and written back to the source when the user commits the binding group

LayoutRounding
Speaks for the feature already in Silverlight, where the layout system rounds any non-integral values at the time of a layout pass. This helps prevent the sub-pixel anti-aliasing effects that people describe as "blurriness"