我正在尝试创建自己的控件来查看XmlDocuments。
我对WPF的理解是我可以创建一个隐式映射到某种类型的DataTemplate。
然后,如果我将这种类型的对象分配给ContentPresenter,它将自动选择适当的DataTemplate。
那么为什么这个15行的XAML不工作呢?
<Window x:Class="TestDataTemplates.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:systemXml="clr-namespace:System.Xml;assembly=System.Xml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<DataTemplate DataType="{x:Type systemXml:XmlDocument}">
<TextBlock Text="Look! An xml document!" />
</DataTemplate>
<systemXml:XmlDocument x:Key="TokenXmlDocument" />
</Window.Resources>
<Grid>
<ContentPresenter Content="{StaticResource ResourceKey=TokenXmlDocument}" />
</Grid>
</Window>
ContentPresenter的内容是一个XmlDocument,所以它应该利用我为它创建的数据模板。我应该看到文字“Look!An xml document!”。
相反,我看到一个空窗口。
<小时/> 稍后修改:有人在此遇到类似问题:Why are XML DataTemplates ignored?
答案 0 :(得分:1)
奇怪!真。
这很有效!
<Window x:Class="WpfApplication1.Window2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
xmlns:sysxml="clr-namespace:System.Xml;assembly=System.Xml"
Title="Window2" Height="350" Width="525">
<Window.Resources>
<DataTemplate DataType="{x:Type sysxml:XmlDocument}">
<TextBlock Text="Look! A system Xml!" />
</DataTemplate>
<local:LocalXmlDocument x:Key="LocalXmlDocument" />
</Window.Resources>
<StackPanel x:Name="Panel">
<ContentPresenter Content="{StaticResource LocalXmlDocument}" />
</StackPanel>
</Window>
并且代码背后......
public class LocalXmlDocument : XmlDocument
{
}
WPF奇怪的无法解释的世界!
答案 1 :(得分:0)
如果模板用于对象数据,则此属性包含 数据对象的类型名称(作为字符串)。要参考类型 类的名称,使用x:Type标记扩展。如果模板是 对于XML数据,此属性包含XML元素名称。 有关指定a的详细信息,请参阅文档备注 XML元素的非默认命名空间。
答案 2 :(得分:0)
相反“{x:输入sysxml:XmlDocument}”使用“#document”