First Silverlight for Windows Embedded Application
Hello, my name is Paul Monson and I am one of developers of the Windows Embedded Silverlight Tools (WEST).
This post will give you a brief introduction to the following features:
- The Blend 3 template for Silverlight for Windows Embedded (SWE) Applications.
- The wizard for creating a Platform Builder subproject that uses SWE.
- The event tool.
- The project update wizard.
The Blend template provides a Blend project that restricts the features available in Blend to match the features available in Silverlight for Windows Embedded as closely as possible. Using this template will enable designers and developers to create projects more quickly since the features available in Blend when using this template should just work in SWE.
Once you have designed the UI in a Blend project you can quickly create a SWE Application using the wizards and tools in Visual Studio 2008. The wizard creates a Platform Builder subproject that provides a minimalist C++ application. The wizard also generates wrapper controls for each of the UserControls that are designed in Blend.
The event tool assists in connecting event handlers to Silverlight controls.
The update wizard updates the subproject with new UserControls, named objects, and event handlers that are added to the original Blend project.
David Shoemaker explained how to install the tools you will need. After build and test your First Image you are ready to create a Platform Builder subproject application using Blend and WEST.
1. Begin by opening Blend 3, creating a new “Silverlight for Windows Embedded Application” project. We will be creating a Platform Builder subproject later, so make sure the location doesn’t have any spaces in it (this means that you can’t create the project in the default project location in the documents folder.)
Once the project is created you should see an empty design surface in Blend. Let’s add the text “Hello World” to the design surface by adding a TextBlock and setting the following properties.
2. Set Name to “HelloWorldTextBlock”, Text to “Hello World” and the font size to 24pt.
3. Hit F5 and verify that you see the words “Hello World when you run the Silverlight App. Launch VS 2008.
Now that you’ve created a “Hello World” Blend application you are ready to use the WEST subproject wizard to create a Silverlight for Windows Embedded Application. This wizard takes the Blend project you just created as input and creates Platform Builder subproject.
4. Open your OS Design in VS 2008.
5. On the Tools menu find “Windows Embedded Silverlight Tools” and click “Create Platform Builder Subproject…” and click “Next”
6. Project Name
a. Name=Hello
b. Choose a location for your subproject.
c. Click “Next”
7. Project Selection
a. Browse to and select the Blend project you just created.
b. Click “Next”
8. Check the validation report for errors. If you are following along there shouldn’t be any, but if the Silverlight project you selected uses features that are not supported by Silverlight for Windows Embedded you will see warnings or errors here. When you’re done with the report click Finish.
9. Now you should see a Summary Report in Visual Studio that includes a list of the files added and the information from the validation report.
10. The subproject was created but it isn’t added to your OS Design yet. To add the new subproject to your OS Design, right-click “Subprojects” in the solution explorer, and choose “Add Existing Subproject…” from the context menu.
11. Select the subproject you just created and click OK. The new subproject should now appear as a node in your OS Design.
12. Open MainPage.xaml
13. Click View -> Other Windows -> Windows Embedded Events to show the event tool.
14. Select “LayoutRoot” in the upper treeview.
15. Double-click the empty text box next to MouseLeftButtonDown in the lower half of the event tool.
16. Copy the following implementation into the stub. This code will exit the application when you click anywhere in the root Grid that isn’t covered by another control.
1: HRESULT MainPage::LayoutRoot_MouseLeftButtonDown (IXRDependencyObject* pSender, XRMouseButtonEventArgs* pArgs)
2: {
3: IXRVisualHostPtr pHost;
4: App::GetVisualHost(&pHost);
5: if(pHost)
6: {
7: pHost->EndDialog(0);
8: }
9: return S_OK;
10: }
17. Right-click the subproject node and choose Build.
18. Download your OS image to your device or vCEPC.
19. On the menu choose Platform>Run and select Hello.exe
At this point you should see your “Hello World” screen appear on the device. You have just created a Silverlight for Windows Embedded application. Now let’s add a button and make it do something when you click on it.
20. In Blend 3 add a Button to MainPage.xaml. Set the Name to “Button1” and the Content of the button to “Click Me” and then run the Blend project to verify that it is valid.
21. In VS 2008 open MainPage.cpp and make it the active editor. Any file from the project should work, but in order for the update menu item to work correctly you must have a project file from the project you want to update open in the active editor.
22. On the Tools menu find Windows Embedded Silverlight Tools and click Update Silverlight for Windows Embedded Project…
23. You should see a progress bar briefly, and when it finishes the message “Update Completed” should be displayed in the Output pane.
24. Open the MainPage.xaml from the subproject resources node.
25. Click View -> Other Windows -> Windows Embedded Events to show the event tool.
26. Select “Button1” in the upper treeview.
27. Double-click in the right-hand side of the Click event row in the lower grid.
28. A Button1_Click event handler stub is inserted and the cursor is positioned in MainPage.cpp at the insertion point.
29. Change the implementation of the stub to:
1: HRESULT MainPage::Button1_Click (IXRDependencyObject* pSender, XRMouseButtonEventArgs* pArgs)
2: {
3: m_pHelloWorldTextBlock->SetText(L"Click");
4: return S_OK;
5: }
30. Right-click the subproject and choose Build.
31. If you disconnected from the test device or emulator you will need to reconnect now, and then select Target -> Run -> Hello.exe again.
32. Click the button, you should see the text block change to “Click”
If the new subproject is checked into source control, both the Blend project and the Platform Builder subproject need to be checked in with the same relative path between the projects that they had at the time the new subproject was created.
Comments
Anonymous
July 20, 2010
Hi Paul, Why I could not found the "Blend 3 template for Silverlight for Windows Embedded (SWE) Applications" in the Blend 3/4. Is this template need to download ? or how to get this template?Anonymous
July 21, 2010
The "Silverlight Windows Embedded Application" template is installed with the Windows Embedded Silverlight Tools which are part of the Windows Embedded Compact 7.0 CTP (go.microsoft.com/fwlink).Anonymous
July 21, 2010
Hi Paul, Does the SWE application generated from the wizard in C++ always? How could I generate a C# application?Anonymous
July 21, 2010
Silverlight for Windows Embedded is a C++ framework only. Silverlight in the browser, on the PC and Phone support managed code (like C#) as well.Anonymous
August 22, 2010
Hi Paul, I am very confused about the versions of the tools. I would like to develop a silverlight application on windows ce 6.0 R3. In this case, can I use VS 2008 and Blend 3? or do I have to use VS 2005 and Blend 2? Any help is highly appreciated!Anonymous
September 09, 2010
The comment has been removedAnonymous
September 09, 2010
The comment has been removedAnonymous
February 22, 2011
The comment has been removedAnonymous
April 17, 2011
Hi Paul, How can we "close" silverlight for embedded app from native code? I mean app.exit or something like that but from button clicked code in MainPage.cpp? greetings.Anonymous
April 17, 2011
ExitProcess(0); works well. Is there way to hande OnClose event?Anonymous
April 18, 2011
Thanks Paul for the First Silverlight for Windows Embedded Application. It was helpful to get started.Anonymous
May 08, 2011
Hi Paul, do you happen to know if Expression Blend 4 will work with Windows Embedded Compact 7 Visual Studio 2008? All the examples I've seen mention Expression Blend 3 but this doesn't seem available to buy through Microsoft (unless you take out certain MSDN Subscriptions) Thanks AndrewAnonymous
July 12, 2011
thank you paul, could i find more on this embedded topic???Anonymous
November 11, 2014
Hi Paul, I am seeing strange issue. If I am trying to create a standalone application, build and deploy it is fail in initialization but when loaded as a part of OS image it works fine. Further debugging to this problem reveals to me that it fails to load XMLResource in LoadResourceDirectory app initialization function.