Как определить неявные шаблоны данных в Metro XAML? - PullRequest
5 голосов
/ 23 сентября 2011

Я пытаюсь создать DataTemplate для сопоставления простого типа данных с соответствующим представлением следующим образом:

<DataTemplate DataType="{x:Type src:Person}">
    <TextBox Text="{Binding Name}"/>
</DataTemplate>

Я получаю ошибку компилятора, указывающую, что свойство DataType не распознано или недоступно.Я что-то здесь упускаю?Есть ли новый синтаксис для этого или функция отсутствует?Существуют ли альтернативные решения для неявных шаблонов?

Для справки приведен полный код с шаблоном DataTemplate, квалифицированным с использованием атрибута ax: Key (работает):

<UserControl x:Class="Metro_App.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:src="clr-namespace:Metro_App"
    mc:Ignorable="d"
    d:DesignHeight="768" d:DesignWidth="1366">

    <UserControl.Resources>        
        <DataTemplate x:Key="PersonTemplate">
            <TextBlock Text="{Binding Name}" Foreground="White" FontSize="72"/>
        </DataTemplate>
    </UserControl.Resources>

    <Grid x:Name="LayoutRoot" Background="#FF0C0C0C">
        <ContentControl Content="{Binding MyPerson}" ContentTemplate="{StaticResource PersonTemplate}"/>
    </Grid>

</UserControl>

Ответы [ 3 ]

9 голосов
/ 23 сентября 2011

С WinRT синтаксис для сопоставления ваших пространств имен CLR с XAML отличается.Вы должны изменить свое отображение с:

xmlns:src="clr-namespace:Metro_App"

на

xmlns:src="using:Metro_App"

Для получения дополнительной информации о переходе с Silverlight на WinRT см. Серию сообщений в блоге от Morten Nielsen или статью, которую я написал о создании кроссплатформенного приложения Silverlight / WinRT .

Однако ... если вы посмотрите документацию API для DataTemplate, вы обнаружите, что тамне является свойством DataType .В WinRT есть неявное моделирование, но не неявное шаблонирование данных.

2 голосов
/ 23 сентября 2011

Silverlight не имеет DataTemplate.DataType, и я подозреваю, что платформа Windows XAML унаследовала это ограничение.Возможно, вам придется использовать DataTemplateSelector .

Интересно, что у него есть класс DataTemplateKey, но его создание из XAML не работает.

0 голосов
/ 23 сентября 2011

Вы определили пространство имен? xmlns: src = "clr-namespace: WpfApplicationNamespace"

<Window x:Class="WpfApplicationNamespace.MainWindow"
    xmlns:src="clr-namespace:WpfApplicationNamespace"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">

<Window.Resources>
    <DataTemplate DataType="{x:Type  src:Persone}"/>
</Window.Resources>
<Grid>
    <StackPanel Orientation="Vertical">
        <Button Content="fffff" Click="Button_Click" />
    </StackPanel>
</Grid>
</Window>
...