5

我正在尝试创建一个 DataTemplate 用于将简单数据类型映射到相应的视图,如下所示:

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

我收到一个编译器错误,表明 DataType 属性无法识别或无法访问。我在这里错过了什么吗?是否有执行此操作的新语法或缺少该功能?隐式模板是否有替代解决方案?

作为参考,这里是使用 ax:Key 属性限定的 DataTemplate 的完整代码(有效):

<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>
4

3 回答 3

9

使用 WinRT,将 CLR 命名空间映射到 XAML 的语法有所不同。你应该改变你的映射:

xmlns:src="clr-namespace:Metro_App"

xmlns:src="using:Metro_App"

有关从 Silverlight 迁移到 WinRT 的更多信息,请参阅Morten Nielsen 的系列博客文章,或我撰写的有关创建跨平台 Silverlight/WinRT 应用程序的文章。

但是...如果您查看DataTemplate 的 API 文档,您会发现没有 DataType 属性。在 WinRT 中有隐式样式,但没有隐式数据模板。

于 2011-09-23T08:00:16.140 回答
2

Silverlight 没有DataTemplate.DataType,我怀疑 Windows XAML 框架继承了该限制。您可能必须改用DataTemplateSelector

有趣的是,它确实有DataTemplateKey类,但从 XAML 实例化它不起作用。

于 2011-09-23T05:34:14.230 回答
-3

你定义了命名空间吗? xmlns:src="clr-命名空间: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>
于 2011-09-23T04:41:22.897 回答