Today is some kind of special day here in Belgium, it’s Saint Nicolas (aka Sinterklaar), comparable to Santa Claus. Special day or not, I’m ready for the sixth installment in my Silverlight article series. In this article, I’ll be describing how you can create toasts (aka notification windows) from Silverlight. We all know the notification windows from Outlook, those little windows that pop open when you receive a new mail. This is a new feature in Silverlight 4.
To support these windows, in Silverlight 4, a new class was added to instantiate them, namely the NotificationWindow. Notification windows are an out-of-browser feature only (just like some other new Silverlight 4 features such as the WebBrowser control which I covered earlier). To enable this behavior, go to the project properties of the Silverlight project and check the “Enable appliction running out-of-browser” checkbox.
Below is a screenshot of the sample code running.
Creating the notication window is straightforward. The following code runs when the “Try notification window” button is clicked in the interface:
private void NotificationButton_Click(object sender, RoutedEventArgs e)
{ if (Application.Current.IsRunningOutOfBrowser)
{ NotificationWindow notificationWindow = new NotificationWindow();
notificationWindow.Width = 300;
notificationWindow.Height = 80;
notificationWindow.Content = new TextBlock()
{ Text = "Test notification window" }; notificationWindow.Show(10000);
}
else
{ MessageBox.Show("You should take the application offline first"); }
}
As you can see, we first perform a check to see if the application is running out-of-browser. Note that displaying a notification window does not need to be initiated from a user interaction, it can also be displayed following an application event (for example based on the Tick event of a Timer).
The notification window we created with the above code is very basic, as shown in the following screenshot.
Creating a more complex (and better looking) window is probably going to be required. And, the good news it’s quite easy to do. You can create a custom control or even a user control and set that as the Content for the NotificationWindow instance. In the code below, I added a third button and when clicked, a new, better looking window will be displayed.
The window itself is nothing more than a user control:
<Grid x:Name="LayoutRoot" Background="White">
<Grid Width="350" Height="80">
<Grid.RowDefinitions>
<RowDefinition Height="15"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<Grid Background="DarkBlue">
<TextBlock Text="Message" FontWeight="Bold"
Foreground="Wheat"></TextBlock>
</Grid>
<Grid Grid.Row="1" Background="LightBlue">
<TextBlock Text="You have clicked a button!"></TextBlock>
</Grid>
</Grid>
To display this control, we can execute the following code:
And this is the result:
