« Success! You have shared your Yahoo! information | Writing a Windows 8 Metro Hello World app using C#, XAML, and calling into a C++ component » |
Setting up SwapChainBackgroundPanel in a XAML app
Monday, July 30, 2012
After creating a XAML app for Windows 8 using the Blank XAML app template, I changed the body of MainPage.xaml from this:
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> </Grid>to this:
<SwapChainBackgroundPanel></SwapChainBackgroundPanel>
While this compiles without warnings, it crashes on launch. With a C++/XAML app, a console message appears:
First-chance exception at 0x754F7945 (KernelBase.dll) in HelloWorld.exe: 0x40080201: WinRT originate error (parameters: 0x80004005, 0x0000005E, 0x031FDCE4).
In both C++ and C#, the exception message is as follows:
Page element must be root of visual tree when its content is SwapChainBackgroundPanel element.
This is because the default XAML template creates a Frame
that hosts your app's pages, and it, not the Page
object, is the root. To remove it, edit App.xaml.cpp
's OnLaunched()
function and replace this:
// Create a Frame to act navigation context and navigate to the first page auto rootFrame = ref new Frame(); if (!rootFrame->Navigate(TypeName(MainPage::typeid))) { throw ref new FailureException("Failed to create initial page"); } // Place the frame in the current Window and ensure that it is active Window::Current->Content = rootFrame; Window::Current->Activate();
with this:
Window::Current->Content = ref new MainPage(); Window::Current->Activate();
If you're using C# and not C++, it's pretty much identical. Just omit the ref
before new MainPage()
.
If you want to learn more about Direct3D and XAML, there is a good article on MSDN about the interop options available.
Comments
J on Friday, November 9, 2012 at 04:44
Thank you very, very much!
Phil on Saturday, December 15, 2012 at 15:45
Was running into the same issue and this resolved it. Thanks!
Eric on Monday, October 14, 2013 at 10:58
thank you! been looking at this bug for two days :/
ecosky on Friday, November 15, 2013 at 10:23
Thanks, this was a very helpful post!
miaodada on Sunday, July 5, 2015 at 00:01
Thank you. This help me so much.
Chad on Tuesday, October 2, 2012 at 10:13
Thanks for this information. It was very useful to me!