2012-11-29 6 views
0

DirectX interop - SwapChainBackgroundPanel과 함께 C++/XAML을 사용하여 Windows Store 앱을 작성하고 있습니다.SwapChainBackgroundPanel에서 마지막 프레임으로 이동

응용 프로그램은 "분할 페이지"템플릿을 기반으로합니다. 각 목록보기 항목에서 아래 코드를 사용하여 DirectX 페이지를 시작할 수 있습니다.

Window::Current->Content = ref new MyD3Components::DirectXPage(); 
Window::Current->Activate(); 

이것은 정상적으로 작동하며 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); 

나는 대상이 없을 때이 (disconnectedexception) 렌더링 파이프 라인에 출력되지 다이렉트 도움 불평 추측.

1

질문에 대한 샘플 예 :

무엇 내가 만드는 오전 : u는 그것을 클릭하면 2 페이지 ... 당신은해야합니다 을 ... 1 페이지의 링크 (2 페이지로 이동), 두 번째 페이지 상단에 "Page 2"라고 표시된 페이지가 나타납니다. 페이지 제목 왼쪽에는 뒤로 버튼이 있습니다. XAML은 다음과 같이한다

1.)으로 이름이 PageTitle 인 TextBlock의 요소를 찾기 ... 첫 페이지로 돌아가려면 버튼을 클릭하고 페이지 1. 텍스트 속성을 변경 :

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

2.) 다음 XAML을 두 번째 자식 요소로 루트 Grid에 추가합니다. 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을 다음과 같이 변경하십시오. XAML은 다음과 같이한다 pageTitle를라는 TextBlock의 요소를 찾아 2 페이지에 텍스트 속성을 변경 :

<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을해야, 우리가 새 페이지를 준비했습니다 이제 BasicPage1.Xaml.cs
private void HyperlinkButton_Click_1(object sender, RoutedEventArgs e) 
{ 
this.Frame.Navigate(typeof(BasicPage2)); 
} 

6

)에 BasicPage1 클래스에 다음 코드를 추가합니다 앱이 시작될 때 가장 먼저 표시됩니다. app.xaml.cs를 열고 BlankPage 대신 BasicPage1을 사용하여 Frame.Navigate를 호출하도록 OnLaunched 메서드를 변경합니다. 전체 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 페이지로 이동하려면 클릭하는 링크를 클릭하십시오. 두 번째 페이지 상단에 "Page 2"가 표시되어야합니다. 페이지 제목 왼쪽에는 뒤로 버튼이 있습니다. 버튼을 클릭하면 첫 번째 페이지로 돌아갑니다. 그게 전부 야! 그것이 도움이되기를 바랍니다.

+0

답변 주셔서 감사하지만 내 질문에 대답하지 않습니다. 필자의 경우 DirectX interop 인 SwapChainBackgroundPanel이 관련되어 있으며 이것이 문제의 원인이라고 생각합니다. –

관련 문제