Загрузить страницу в 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>