1

我有一个 ContentControl 我想在其中加载页面myPage2。此页面的我的 XAML 代码如下所示:

<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 中?

4

1 回答 1

1

没有理由在 a 中使用Pagea ContentControl。APage是该类的子UserControl类,它添加了对在Frame控件中使用以支持导航、返回堆栈/历史记录等的支持。您可能应该在 XAML 和代码后面替换PageUserControl,因此您最终会得到如下内容:

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

如果要将其用作 a中的 a ,则可以将其UserControl本身放入a :DataTemplateDataTemplateContentControl

<ContentControl
    xmlns:controls="using:ExampleApp">
    <ContentControl.Resources>
        <DataTemplate
            x:Key="Test">
            <controls:myControl2 />
        </DataTemplate>
    </ContentControl.Resources>
</ContentControl>
于 2013-04-26T18:14:30.817 回答