Загрузить страницу в ContentControl

У меня есть 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?

1 ответ

Решение

Нет причин использовать Page в пределах ContentControl, Page является подклассом UserControl класс, который добавляет поддержку для использования в Frame контроль для поддержки навигации, заднего стека / истории и т. д. Вы, вероятно, должны заменить Page с UserControl в 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>
Другие вопросы по тегам