2013-04-26 2 views
1

У меня есть ContentControl, где я хочу загрузить страницу myPage2. Мой XAML Codefrom эта страница выглядит следующим образом:Загрузите страницу в ContentControl

<Page x:Class="ExampleApp.myPage2"> 
    <Grid x:Name="Content" Height="651" Width="941" Background="White"> 
     ... 
     ... 
    </Grid> 
</Page> 

Я знаю, что я могу загрузить ресурс со страницы с настоящим Кодексом:

protected override DataTemplate SelectTemplateCore(object item, DependencyObject container) 
{ 
    var contentControl = (ContentControl)container; 
    return (DataTemplate) contentControl.Resources[templateKey]; 
} 

Моя проблема сейчас в том, что я не могу загрузить страницу как выше с этим кодом. Я должен написать это:

<Page x:Class="ExampleApp.myPage2"> 
    <Page.Resources> 
     <DataTemplate x:Key="Test">  
      <Grid x:Name="Content" Height="651" Width="941" Background="White"> 
       ... 
       ... 
      </Grid> 
     </DataTemplate> 
    </Page.Resources> 
</Page> 

И тогда я могу загрузить страницу с тем же кодом сверху templateKey="Test". Но главная проблема заключается в том, что я хочу использовать первое объявление страницы и не хочу использовать <Page.Resources> <DataTemplate x:Key="Test"> и так далее. Я хочу загрузить сайт с первого объявления (первый код в этом сообщении). Как я могу создать DataTemplate непосредственно со страницы? Или есть другой способ загрузить страницу в ContentControl?

ответ

1

Нет причин использовать Page в пределах ContentControl. A Page является подклассом класса UserControl, который добавляет поддержку для использования в элементе управления Frame для поддержки навигации, обратного стека/истории и т. Д. Вероятно, вы должны заменить PageUserControl в XAML и код позади, так что вы получите что-то как это:

<UserControl x:Class="ExampleApp.myControl2"> 
    <Grid x:Name="Content" Height="651" Width="941" Background="White"> 
     ... 
     ... 
    </Grid> 
</UserControl> 

вы можете поставить сам UserControl в DataTemplate, если вы хотите использовать его в качестве DataTemplate в ContentControl:

<ContentControl 
    xmlns:controls="using:ExampleApp"> 
    <ContentControl.Resources> 
     <DataTemplate 
      x:Key="Test"> 
      <controls:myControl2 /> 
     </DataTemplate> 
    </ContentControl.Resources> 
</ContentControl> 
+0

Great спасибо, что работает отлично. Я не уверен, что об UserControls - действительно отличное решение. – Cilenco