Wahlin on .NET

Silverlight XAML Primer 8: Working with XAML Events

Get started using Silverlight's rich media capabilities.

Today's applications require a high level of interactivity with end users. Although Silverlight can be used without any user interaction to animate text or shapes or display media, the majority of Silverlight applications built will likely allow users to start, pause or stop a media clip, select an item or click a button.

In my previous article, I introduced how media could be embedded in a XAML canvas. By using the MediaElement tag, you can embed .WMV, .WMA and .MP3 files directly into a Silverlight application. In many cases, you'll want end users to control the media being played, which means that you need a way to handle events using event handlers. Silverlight 1.0 provides a rich event model that can be easily used and accessed, as I'll show in this article.

Getting Started with Events
Events can be defined directly on XAML elements much like defining events on HTML elements. If you need an HTML button to call a JavaScript function, you simply add an onclick attribute as below:

 <input type="button" 
 id="btnSubmit" value="Submit" 
 onclick="ButtonClick()" />

Events and their associated event handler functions can be added onto XAML elements in much the same way. Listing 1 shows an example of a Canvas element that contains Rectangle and TextBlock elements used to render a button. Looking through the code, you'll see that the Canvas defines a MouseLeftButtonDown event handler rather than a Click or OnClick event handler. Several other types of events can also be handled, such as Loaded, GotFocus, LostFocus, KeyDown, KeyUp and many others.

As the Canvas element in Listing 1 is clicked, the MouseLeftButtonDown event is fired and event data is routed to a JavaScript function named ButtonMouseClick(). Listing 2 shows the ButtonMouseClick() event handler. Notice that the signature for the event handler is similar to the one used in VB.NET or C# code. The first parameter represents the sender of the event while the second parameter contains any event data being passed as the event is raised.

The code in Listing 2 is capable of handling three different Canvas element events used to control media playing in a MediaElement. The first canvas button allows the media to be played, the second canvas button pauses it and the third canvas stops it (the complete XAML code is available with this article's downloadable code). Figure 1 shows an example of what the buttons look like once rendered in Silverlight.

When the ButtonMouseClick() event handler is called, it first determines which canvas was clicked, which it does by looking at the sender parameter's Name property. Once the name of the canvas that was clicked is determined, the code in Listing 2 locates the MediaElement element in the XAML (named mediaElement) by using the FindName() method available in Silverlight. (FindName() is similar to the document.getElementById() DOM method that you may have used in DHTML or AJAX application coding.) Once the MediaElement element is found, the appropriate method is called on it to play, pause or stop the media clip. The code also locates a TextBlock element in the XAML and shows or hides it by changing its Opacity property to 0 (hidden) or 1 (visible).

Silverlight objects expose many different types of events which allow you to tie into actions end users are performing with your application. This article has only scratched the surface of events but as the series continues you'll see events being used more and more.

About the Author

Dan Wahlin (Microsoft MVP for ASP.NET and XML Web Services) is the founder of The Wahlin Group which specializes in .NET and SharePoint onsite, online and video training and consulting solutions. Dan also founded the XML for ASP.NET Developers Web site, which focuses on using ASP.NET, XML, AJAX, Silverlight and Web Services in Microsoft's .NET platform. He's also on the INETA Speaker's Bureau and speaks at conferences and user groups around the world. Dan has written several books on .NET including "Professional Silverlight 2 for ASP.NET Developers," "Professional ASP.NET 3.5 AJAX, ASP.NET 2.0 MVP Hacks and Tips," and "XML for ASP.NET Developers." Read Dan's blog here.

comments powered by Disqus

Featured

  • Compare New GitHub Copilot Free Plan for Visual Studio/VS Code to Paid Plans

    The free plan restricts the number of completions, chat requests and access to AI models, being suitable for occasional users and small projects.

  • Diving Deep into .NET MAUI

    Ever since someone figured out that fiddling bits results in source code, developers have sought one codebase for all types of apps on all platforms, with Microsoft's latest attempt to further that effort being .NET MAUI.

  • Copilot AI Boosts Abound in New VS Code v1.96

    Microsoft improved on its new "Copilot Edit" functionality in the latest release of Visual Studio Code, v1.96, its open-source based code editor that has become the most popular in the world according to many surveys.

  • AdaBoost Regression Using C#

    Dr. James McCaffrey from Microsoft Research presents a complete end-to-end demonstration of the AdaBoost.R2 algorithm for regression problems (where the goal is to predict a single numeric value). The implementation follows the original source research paper closely, so you can use it as a guide for customization for specific scenarios.

  • Versioning and Documenting ASP.NET Core Services

    Building an API with ASP.NET Core is only half the job. If your API is going to live more than one release cycle, you're going to need to version it. If you have other people building clients for it, you're going to need to document it.

Subscribe on YouTube