| Comments

Silverlight 5 is finally released!  Congratulations to the team for getting through some of the toughest parts of finishing a product and validating with customers.  It’s been a pretty crazy year for the Silverlight team and this is a really good release for the product bringing some solid features to the platform for folks to leverage in building their apps.

In addition to the platform having a release, I was really pleased to see an update to the Silverlight Toolkit, which has been one of the most popular things almost every Silverlight developer/application uses.  If you didn’t know where to get things, here’s some links for you:

Rather than enumerate all the good features that were finished from the RC/Beta, you should head on over to listen/watch Pete Brown’s presentation on the Silverlight 5 release overview.  He also has a post about the release enumerating in short form (with links to tutorials for some of the key features) on his blog.

What I think is really cool is also the amount of effort put into the Silverlight Toolkit for this release.  The one large thing of note is the extensions to enhance your 3D development experience in Silverlight 5.  David Catuhe has a post outlining in great detail some of the 3D extensions included in the toolkit.  You should really go check out his post.  Scrolling to the bottom I was really surprised/impressed to see a set of 3D samples included to help you understand how to use this feature:

  • Bloom – uses the Content Pipeline and post-processing effects
  • CustomModelEffect
  • Generated geometry – how 3D models generated by code
  • Particles – c’mon, who doesn’t like a particle generator!
  • Platformer - while not 3D it appears, it is a complete game with levels
  • 3D Animation
  • Skinning – shows skinning a character using the content pipeline

I mean, wow, great stuff David! 

I hope you all enjoy the release of Silverlight 5 and kudos to the team for getting it out the door. Go download the bits and start building awesome stuff.

| Comments

The Silverlight 5 Release Candidate (RC) is now available for developers to download.  As with previous preview releases, this is a developer-focused release, which means no production releases, no go-live license, etc.  This is made available for you to test your apps, upgrade to get latest features and to deal with the changes from beta to RC.

The beta was a great release and preview of what the team had introduced as new features.  You can read back on my Silverlight 5 guide to new features post regarding if you haven’t understood the latest and greatest additions.  However there are now some new available features in the RC including:

  • P/Invoke for calling native methods
  • 64-bit support for the plugin
  • Vector printing
  • Capabilities to support remote controls (for media)
  • In-browser trusted apps
  • PivotViewer now a part of Silverlight (with new features)

Some things have changed from beta to RC, to be sure to take a look at your code, references, namespaces, etc.

Pete Brown has a great announcement post on his blog with links to his (updated for RC) tutorials and videos for Silverlight 5. Be sure to go on over there and read and get the links.

| Comments

Silverlight LogoAt the MIX11 conference Scott Guthrie announced the availability of Silverlight 5 Beta.  I suppose this doesn’t come at a surprise to most as this is now a regular annual occurrence.  In fact it is almost exactly a year ago when Silverlight 4 was released.

The team has been working very hard to deliver on the features we discussed at the Silverlight Firestarter event last December 2010.  That was a flurry of revealing that happened in December showing the world what the Silverlight team has been working on.  There was no rest for them of course and they continued to complete this initial version of Silverlight 5 to release at MIX11. 

As always with Silverlight betas, this is a developer release.  This means that this is a preview for software developers to understand and appreciate (and give feedback) the new features provided.  There is no “end-user” runtime available for the release nor a “go-live” license for you to develop applications into production. 

So enough with the pleasantries…

Download Silverlight 5 and Tools

To get started with the Silverlight 5 beta you are going to need some tools.  Here’s the link dump (be patient as some link caches get updated):

These are the full set of tools to help you evaluate Silverlight 5.  At a bare minimum for a developer you’ll need/want the Visual Studio 2010 and the Silverlight 5 Tools for VS.

NOTE: In case you are like me and don’t like to read the finer details you may have missed the note that you don’t need to install the developer runtime/SDK separately if you are installing the Silverlight 5 Tools.  Again, it is not necessary to install the SDK and developer runtimes *again* if you have already installed the Silverlight 5 Tools for Visual Studio.  The links to the developer runtimes are provided for convenience as some use these to put on test machines without developer tools to test things out and debug.

Go ahead and start downloading the tools now…here’s some information on the release for you as you download!

Silverlight 5 Resources

There are a few places you can go to get more information and quick learning on Silverlight 5:

You should also subscribe/bookmark those links as they’ll likely to be continually updated with good nuggets of information!

What’s new in Silverlight 5 – feature review

Here’s more of the details on what is new in this release.  This shouldn’t come of any surprise if you watched the Silverlight Firestarter event and saw all the new stuff.  This is a little long in description here, but hopefully for your benefit.

Tooling

How could we have a release without improved tools?  Visual Studio 2010 has proved to me to be a great platform (have you seen the Extension Manager and how you can grab all the great things online?  VSCommands is my favorite) for productive development on the Microsoft platforms.

You would expect to have the Silverlight 5 support in the tools and it is in there, all what you want.  The cool thing is that adding the tools on your existing SP1 installation gives you ultimate Silverlight multi-targeting support:

Silverlight Multi-targeting

In addition to the basics and supporting the new features, we’ve added one of my favorite tooling features that folks have been asking for: XAML debugging.  Now right now it is for Binding expressions only, but let’s be honest, that’s what you care most about right!  So what does this feature mean?  Well you can set a breakpoint in your editor on XAML lines that have the {Binding} syntax in them:

XAML Breakpoint Editor

When that binding is evaluated you’ll get information about the binding evaluation:

XAML Breakpoint Watch Window

Pretty helpful huh?  We hope so.  For now it is supported for Binding only.

Video: Pete Brown demonstrates XAML debugging

Media

A few things improved on the media front based on some feedback from our customers.  First, when having the need for low-latency sound (for things like audio loops, etc.) the MediaElement wasn’t doing the trick.  There were a few hacks you could do, but overall not ideal.  So remember how we did some fun things on the phone that allowed you to use XNA?  Well, now we have SoundEffect for Silverlight 5 as well.  This should look familiar if you are a Windows Phone developer:

   1: using Microsoft.Xna.Framework.Audio;
   2:  
   3: // theStream is some audio stream you've retrieved
   4: // from a source
   5:  
   6: SoundEffect se = SoundEffect.FromStream(theStream.Stream);
   7: se.Play();

Hopefully this will be a welcome addition for those working with audio.  You can also control the volume, pitch, etc. in the SoundEffect class.

Video: Pete Brown demonstrates low-latency sound

We also introduced a new feature that some affectionately call the “training video” feature.  Technically it’s called TrickPlay or variable speed playback.  This allows you to set a playback speed/rate on your MediaElement from 0.5-2 (where 1 is the normal playback of your media).  The idea is that you’d get media playback at your chosen speed but also proper audio pitch correction.  The code couldn’t be simpler:

   1: protected void SpeedUpTrainingButtonClicked(object sender, RoutedEventArgs args)
   2: {
   3:     trainingVideoMediaElement.PlaybackRate = 1.8;
   4: }

For the beta, the audio pitch correction isn’t yet available so when setting the PlaybackRate you’ll only see the video effect right now.

We have also enabled hardware decode for H.264 playback in this release!

^ back to top

Text

We’ve made a few improvements to the Text stack.  We’re introducing a RichTextBoxOverflow element that will allow you to have linked text containers where the text flows to another element.  This will help with automatically laying out text in situations like mulit-column.  Here’s a snippet of what it might look like using element binding:

   1: <StackPanel Width="200">
   2:     <RichTextBox Width="50" Height="50"
   3:         OverflowContentTarget="{Binding ElementName=OverflowArea}">
   4:         <Paragraph>
   5:             This is some really long text that won't fit right into the main RTB control and should overflow into the area that I've defined in my XAML to be the other section.
   6:         </Paragraph>
   7:     </RichTextBox>
   8:     <RichTextBoxOverflow x:Name="OverflowArea" />
   9: </StackPanel>

This would render:

Linked Text Container

For the typography-philes in the Silverlight world, we’re adding tracking and leading support.  If those terms are foreign to you, you are not alone!  They basically provide more control over character spacing when text is rendered.  Example:

   1: <RichTextBox FontSize="12" CharacterSpacing="300" />

Would look like:

Text Tracking and Leading

A few things that we’re working on that aren’t in in the beta right now but we’re working on are improving text clarity using pixel-snapping and enhanced OpenType support.  Some of these were demonstrated at MIX so be sure to watch the keynote and session videos!

Video: Pete Brown demonstrates text in Silverlight 5

^ back to top

Data Binding

There are a few features that I categorize in this area of data binding.  They may all not directly be related, but I mentally put them in this category.  First we now support Implicit DataTemplates.  What this means is that you can specify a DataTemplate for a specific type in your binding.  Let’s use a simple example.  Let’s say I have an object Person which has FirstName, LastName, Title.  I now have another object called Manager, which inherits from Person and Employee which also inherits from Person.  If I was binding to a list box and wanted to list these people I could do something like this:

Class Code:

   1: void MainPage_Loaded(object sender, RoutedEventArgs e)
   2: {
   3:     List<Person> people = new List<Person>();
   4:  
   5:     people.Add(new Manager() { FirstName = "Scott", LastName = "Guthrie", Title = "VP" });
   6:     people.Add(new Employee() { FirstName = "Tim", LastName = "Heuer", Title = "Minion" });
   7:     people.Add(new Manager() { FirstName = "Steve", LastName = "Ballmer", Title = "CEO" });
   8:     people.Add(new Employee() { FirstName = "Scott", LastName = "Hanselman", Title = "Open Source Fanatic" });
   9:  
  10:     PeopleList.ItemsSource = people;
  11: }

XAML:

   1: <ListBox x:Name="PeopleList">
   2:     <ListBox.Resources>
   3:         <DataTemplate DataType="local:Manager">
   4:             <Border Background="LightBlue">
   5:                 <StackPanel Orientation="Horizontal">
   6:                     <TextBlock Text="{Binding FirstName}" />
   7:                     <TextBlock Text="{Binding LastName}" />
   8:                 </StackPanel>
   9:             </Border>
  10:         </DataTemplate>
  11:         <DataTemplate DataType="local:Employee">
  12:             <Border Background="Bisque">
  13:                 <StackPanel Orientation="Horizontal">
  14:                     <TextBlock Text="{Binding FirstName}" />
  15:                     <TextBlock Text="{Binding LastName}" />
  16:                 </StackPanel>
  17:             </Border>
  18:         </DataTemplate>
  19:     </ListBox.Resources>
  20: </ListBox>

which would render:

Implicit DataType Binding

This flexibility allows me to use binding on same shaped objects, but provide unique characteristics in my template where appropriate.

Video: Pete Brown demonstrates Implicit DataTemplates

Ancestor RelativeSource binding is also now supported which allows a DataTemplate to bind to a property of the element that contains it, like:

   1: <UserControl x:Class=”MyApplication1.UserControl1
   2:             xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation
   3:             xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml>
   4:     <ContentControl Tag=”SomeValue>
   5:         <HeaderdContentControl>
   6:             <HeaderedContentControl.Header>
   7:                 <TextBlock Text=”{Binding Tag, RelativeSource=
   8: {RelativeSource,AncestorType=ContentControl, AncestorLevel=2}}” />
   9:             </HeaderedContentControl.Header>
  10:             <Button>Click Me!</Button>
  11:         </HeaderdContentControl>
  12:     </ContentControl>
  13: </UserControl>

This has been a highly requested feature as well!

How about some custom MarkupExtensions?  Yes, that’s available now as well!  This will help with those who follow the MVVM pattern of development as well as those who have been yearning to be able to have their own expressions run on markup.  I’ve also thought people could use this to scaffold localization efforts as well around a MarkupExtension.  Maybe something like:

   1: <TextBlock Text="{local:ResourceLookup Path=MyResourceKey}" />

I think this will be a useful feature.  Of course you are required to actually write code for your extension!

Also in the beta is the ability to perform binding in Style setters.  These are some great improvements to our markup/binding story and features which you have been asking for so I can’t wait to see how they are used!

^ back to top

Controls

This is another general category I am including some features which are available in Silverlight 5.

First is what we call ClickCount.  This will help with basically doing the double-click tracking on elements in your application:

   1: private void CheckClick(object sender, MouseButtonEventArgs e)
   2: {
   3:     if (e.ClickCount == 2)
   4:     {
   5:         // double-click happened
   6:     }
   7: }

Video: Pete Brown demonstrates ClickCount usage

Next is multiple-window support.  This is the same Window element that the MainWindow shares and you are able to create numerous Windows that your application can interact with and show as separate windows in the OS.  This is not a ChildWindow implementation where they are all within the main object.  This feature is available to out-of-browser applications.  Once the main application is closed, all the Windows created from that will close as well.

Video: Pete Brown demonstrates multiple Windows

^ back to top

3D Graphics API

One of the coolest demos at the Silverlight Firestarter was the 3D demonstrations.  I don’t even claim to be close to a novice on 3D graphics, but I can’t wait to see what people do with the 3D APIs.  I would keep a watch on Rene Schulte as I’m positive he’ll have some cool stuff come out!  It’s hard to show a short snippet of 3D but here’s some effects you’ll be able to do:

Silverlight 3D Example

Be sure to watch out for more examples here to understand the capabilities.

Check out Rene Schulte and Andy Beaulieu for some good examples.  Here are some teasers:

^ back to top

Trusted Applications in Browser

A new feature we are bringing is the ability to do some of the “trusted” features in Silverlight in the browser.  This brings the current functionality of trusted applications in current form to be used in the browser context without having to be installed.  This still requires the XAP to have the ElevatedPermissions security setting in the manifest as it would exist with out-of-browser applications as well as the XAP being signed (and the certificate in the user’s trusted publisher store).

Additionally the requirement would be that a registry key be set on the machine to enable this.  This could be deployed via Group Policy or other desktop-management techniques.  Once these are in place, the application can take advantage of the elevated permissions feature set introduced in Silverlight 4, including things like full keyboard access in full-screen mode.

^ back to top

Trusted Applications Out-of-browser Enhancements

In addition to the new multiple Window support, trusted out-of-browser applications can now access the broader file system outside of the user’s “My Documents” type areas on the disk.  We hope this provides greater flexibility in the most trusted application area.

^ back to top

General “stuff”

In addition to the features noted above, here’s some things that are also included that I chose not to put in one of these categories and are implemented in the Silverlight 5 beta:

  • Startup performance improvements on multi-core systems (multi-core JIT)
  • ComboBox with type-ahead searching
  • DefaultFileName in SaveFileDialog!!!
  • Improvements in the graphics stack brought over from the Windows Phone codebase
  • Hardware acceleration in Windowless mode in Internet Explorer 9

You may be realizing there was a lot more shown at MIX keynote and will be discussed.  You’d be right.  There are a number of things we are still refining that aren’t in the current beta such as:

  • Vector printing
  • Power awareness for things like full-screen apps (i.e., don’t put me to sleep if I’m watching an awesome movie)
  • Remote control support allowing users to control media playback
  • OpenType support as previously mentioned
  • Text clarity improvements with pixel snapping as previously mentioned
  • A new DataContextChanged event
  • WS-Trust support for services
  • 64-bit support for the plugin
  • COM interop for trusted in-browser applications
  • P/Invoke for trusted applications
  • PivotViewer control improvements and distributed in the SDK

As you can see we’re still going to be busy and hope that you like what you see so far!

^ back to top

Summary and Feedback

Now you have some new toys to play with.  If you’ve read all this post then your tools should have been done downloading now, so go install them, watch some of Pete’s videos linked here and learn about the new features.  If you find issues please be sure to report the feedback (it is better to report bugs/issues via the official channels than as a comment here).  Also be sure to read the changes document to get an idea of how any changes may affect your applications.

Congratulations to the Silverlight 5 team (be sure to say hello to them at MIX if you are there) and we hope you like what you see and the direction we’re going to enable features you’ve been asking for in the platform.

Hope this helps!

| Comments

Silverlight 5

Today we had the SIlverlight Firestarter event and revealed to the world for the first time, not only the plans for the next version of Silverlight, but also a slew of demonstrations of some key features.

If you weren’t able to attend live or online real-time, we have recorded the sessions which will be available later this week on Channel 9.

There has been a lot of confusion on the future of Silverlight.  Microsoft wants to ensure we have a great developer platform portfolio that supports all great technologies like HTML5, Silverlight and WPF.  We’ll continue to invest in these technologies for the future of developers to target multiple platforms, technologies and devices.

But for now, let me share some of the things we announced that we’re working on to deliver for Silverlight 5…

Media Improvements

  • Hardware Decode and presentation of H.264 media
  • “TrickPlay” allows video to be played at different speeds and supports fast-forward and rewind. At up to twice the speed, audio pitch correction allows users to watch videos while preserving a normal audio pitch.
  • Improved power awareness prevents the screen saver from being shown while watching video and allows the computer to sleep when video is not active.
  • Remote-control support allowing users to control media playback.
  • Digital rights management advancements allow seamless switching between DRM media sources.

Application Development

  • Fluid user interface enables smoother animation within the UI. Layout transitions allow developers to specify animations to apply when elements are added, removed or re-ordered within a layout. This provides smoother user experiences when, for example, items are inserted into a list.
  • Text improvements make it possible to build rich magazine-style text layouts:
    • Multicolumn text and linked text container allow text to flow around other elements.
    • Tracking/leading set precisely how far apart each character is for full creative control.
    • Text clarity is improved with Pixel Snapping.
    • Text layout performance is significantly improved.
    • OpenType support has been enhanced.
  • Support for Postscript vector printing enables users to create reports and documents, including the ability to create a virtual print view different from what is shown on the screen.
  • Applications can now work the way users expect with added support for double-click and ComboBox type ahead.
  • Databinding enhancements allow more work to be done more easily via XAML:
    • Debugging support now allows breakpoints to be set on a binding, so you can step through binding failures.
    • Implicit DataTemplates allow templates to be created across an application to support a particular type by default.
    • Ancestor RelativeSource allows, for example, a DataTemplate to bind to a property on the control that contains it.
    • Binding in style setters allows bindings to be used within styles to reference other properties.
    • The DataContextChanged event is being introduced. Markup extensions allow code to be run at XAML parse time for both properties and event handlers, enabling cutting-edge MVVM support.
  • Networking and Windows Communication Foundation enhancements:
    • Reduced network latency by using a background thread for networking.
    • WS-Trust support: Security Assertion Markup Language authentication token.
  • Silverlight 5 performance improvements include these:
    • Reduced network latency by using a background thread for networking.
    • XAML parser improvements that speed up startup and runtime performance.
    • Support for 64-bit operating systems.
  • Graphics improvements
    • Graphics Processing Unit (GPU) accelerated 3-D application programming interface (API) provides rich graphics on the Web for building advanced data visualizations and rich user experience (UI).
    • Immediate mode graphics API allows direct rendering to the GPU.
    • Hardware acceleration is enabled in windowless mode with Internet Explorer 9.
  • Silverlight offers a new class of trusted applications that brings desktop capabilities to the browser for the first time. These features, when enabled via a group policy registry key and an application certificate, mean users won’t need to leave the browser to perform complex tasks:
    • Host HTML content as a Web browser control within the Silverlight application. HTML pages, such as help content or e-mail, can be integrated within the application.
    • Read and write files to the user’s My Documents folder, making it easier to find media files or create local copies of reports.
    • Launch Microsoft Office and other desktop programs. Users can open Microsoft Outlook and create an e-mail message, or send a report to Word utilizing the power of Office.
    • Access devices and other system capabilities by calling into application COM components. Users can access a USB security card reader or a bar-code scanner.
    • Enjoy full keyboard support in full screen, which enables richer kiosk and media viewing applications.
    • Call existing unmanaged code directly from within Silverlight with P/Invoke.
  • Out-of-browser trusted applications are further enhanced:
    • Existing unmanaged code can be called directly from within Silverlight with P/Invoke.
    • Child Window support allows multiple windows to be launched from the application.

Summary

So as you can see an impressive list of features we’ve been really working hard on to deliver.  We hope you like the features.  Please continue to suggest features to our team at http://silverlight.mswish.net and vote up others that already exist.  We really hope you look forward to the next version of Silverlight as we’re excited to bring it to you.

Sorry to burst your bubble, but no downloadable bits for you to play with just yet :-).

Hope this helps!