我正在使用带有DirectX互操作的C ++ / XAML编写Windows应用商店应用 - SwapChainBackgroundPanel。
该应用程序基于“拆分页面”模板。从每个列表视图项,可以使用下面的代码启动DirectX页面。
Window::Current->Content = ref new MyD3Components::DirectXPage();
Window::Current->Activate();
这很好用,DirectX页面打开并播放得非常好。
我希望在应用栏中有一个按钮,帮助用户返回并显示“拆分页面”以允许选择另一个DirectX页面。这个我还没有完成。
在我尝试的几件事中,下面是我认为最符合逻辑的事情。当用户想要返回最后一页时,它会给出“Platform :: DisconnectedException”。
Windows::UI::Xaml::Controls::Frame^ rootFrame = SDL::App::GetRootFrame();
Window::Current->Content = rootFrame;
Window::Current->Activate();
请查看您是否有建议或更好的解决方案。
答案 0 :(得分:1)
这是您问题的示例:
我在创作:2页...... 您将在第1页上找到(转到第2页)链接...如果您单击该链接,则第二页应显示在顶部显示“第2页”。请注意,页面标题左侧有一个后退按钮。单击按钮返回第一页...
1。)找到名为pageTitle的TextBlock元素,并将Text属性更改为Page 1.XAML应如下所示:
<TextBlock x:Name="pageTitle" Grid.Column="1" Text="Page 1"
Style="{StaticResource PageHeaderTextStyle}"/>
2.)将以下XAML作为第二个子元素添加到根网格中。 StackPanel元素应该是Grid的兄弟,它包含后退按钮和页面标题。
<StackPanel Grid.Row="1"
Margin="120,0,120,60">
<HyperlinkButton Content="Click to go to page 2" Click="HyperlinkButton_Click_1"/>
</StackPanel>
3.)对BasicPage2.xaml进行以下更改。 找到名为pageTitle的TextBlock元素,并将Text属性更改为Page 2.XAML应如下所示:
<TextBlock x:Name="pageTitle" Grid.Column="1" Text="Page 2"
Style="{StaticResource PageHeaderTextStyle}"/>
4.)将以下XAML作为第二个子元素添加到根网格中。 StackPanel元素应该是Grid的兄弟,它包含后退按钮和页面标题。
<StackPanel Grid.Row="1"
Margin="120,0,120,60">
<TextBlock HorizontalAlignment="Left" Name="tb1" Text="Hello World!"/>
</StackPanel>
5.)将以下代码添加到BasicPage1.Xaml.cs
中的BasicPage1类private void HyperlinkButton_Click_1(object sender, RoutedEventArgs e)
{
this.Frame.Navigate(typeof(BasicPage2));
}
6.)现在我们已经准备好了新页面,我们需要让BasicPage1成为应用程序启动时出现的第一件事。打开app.xaml.cs并使用BasicPage1而不是BlankPage更改OnLaunched方法以调用Frame.Navigate。整个OnLaunched方法应如下所示:
protected override void OnLaunched(LaunchActivatedEventArgs args)
{
// Create a Frame to act navigation context and navigate to the first page
var rootFrame = new Frame();
rootFrame.Navigate(typeof(BasicPage1));
// Place the frame in the current window and ensure that it is active
Window.Current.Content = rootFrame;
Window.Current.Activate();
}
现在您已准备好测试该应用。启动应用程序,然后单击“单击”转到第2页的链接。第二页应显示在顶部显示“第2页”。请注意,页面标题左侧有一个后退按钮。单击按钮返回第一页。 而已!希望它能帮助你。
答案 1 :(得分:1)
经过一些反复试验,我能够回答我自己的问题。似乎我需要做的就是从CompositionTarget中删除我的渲染回调。
添加如下。
m_eventToken = CompositionTarget::Rendering::add(ref new Windows::Foundation::EventHandler<Object^>(this, &DirectXPage::OnRendering));
在更换当前窗口并激活它之前,我在下面打电话。
CompositionTarget::Rendering::remove(m_eventToken);
我猜这有助于DirectX不输出渲染管道并在目标不存在时抱怨(disconnectctedexception)。