2013-04-26 54 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

没有理由在ContentControl内使用Page。 A PageUserControl类的一个子类,它增加了支持在Frame控件中用于支持导航,反向堆栈/历史记录等的功能。您应该用XAML中的UserControl替代Page,并在后面添加代码,以便最终获得某些内容像这样:

<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

大感谢你,完美的作品。我没有关于UserControls - 真的很棒的解决方案。 – Cilenco 2013-04-26 18:26:25

相关问题