从SwapChainBackgroundPanel导航到最后一帧

时间:2012-11-29 19:52:57

标签: windows-8 winrt-xaml windows-store-apps directx-11

我正在使用带有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();

请查看您是否有建议或更好的解决方案。

2 个答案:

答案 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)。