2012-11-29 65 views
0

我正在寫一個使用C++/XAML和DirectX interop的Windows應用商店應用程序 - SwapChainBackgroundPanel。導航到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(); 

請看看您是否有建議或更好的解決方案。

回答

1

經過一番反覆試驗,我有能力回答我自己的問題。似乎我需要做的就是從CompositionTarget中刪除我的渲染回調。

它被添加如下。

m_eventToken = CompositionTarget::Rendering::add(ref new Windows::Foundation::EventHandler<Object^>(this, &DirectXPage::OnRendering));  

在更換當前窗口並激活它之前,我在下面調用。

CompositionTarget::Rendering::remove(m_eventToken); 

我猜這有助於DirectX的不是輸出到渲染管線和抱怨(disconnectedexception)當目標是不存在的。

1

這裏爲您的問題樣品例如:

什麼我創建:2頁... 您必須(去第2頁)的鏈接第1頁上......如果妳單擊,第二應該出現頁面頂部顯示「頁面2」的頁面。請注意,頁面標題左側有一個後退按鈕。點擊按鈕,返回到第一頁......

1)找到名爲PAGETITLE TextBlock元素,改變Text屬性頁1. XAML應該是這樣的:

<TextBlock x:Name="pageTitle" Grid.Column="1" Text="Page 1" 
     Style="{StaticResource PageHeaderTextStyle}"/> 

2。 )將以下XAML作爲第二個子元素添加到根網格。 StackPanel元素應該是包含後退按鈕和頁面標題的網格的兄弟。

<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屬性更改爲第2頁的XAML應該是這樣的:

<TextBlock x:Name="pageTitle" Grid.Column="1" Text="Page 2" 
     Style="{StaticResource PageHeaderTextStyle}"/> 

4)添加以下XAML作爲第二個子元素到根格。 StackPanel元素應該是包含後退按鈕和頁面標題的網格的兄弟。

<StackPanel Grid.Row="1" 
    Margin="120,0,120,60"> 
    <TextBlock HorizontalAlignment="Left" Name="tb1" Text="Hello World!"/> 
</StackPanel> 

5)在BasicPage1.Xaml.cs

private void HyperlinkButton_Click_1(object sender, RoutedEventArgs e) 
{ 
this.Frame.Navigate(typeof(BasicPage2)); 
} 

6)下面的代碼添加到BasicPage1類現在,我們已經準備了新的頁面,我們需要做的BasicPage1在應用程序啓動時出現的第一件事。打開app.xaml.cs並更改OnLaunched方法以使用BasicPage1而不是BlankPage調用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頁」。請注意,頁面標題左側有一個後退按鈕。點擊按鈕返回到第一頁。 那就是它!希望它對你有所幫助。

+0

感謝您的答案,但它沒有解決我的問題。就我而言,涉及到DirectX interop和SwapChainBackgroundPanel,我認爲這是問題的根源。 –