我正在尝试设置将用于Line
( System.Windows.Shapes.Line
) 对象的 WPF DataTemplate。
从默认的 .NET 4 WPF 应用程序中,我将 Window xaml 设置为:
<Window x:Class="WpfTestDataTemplates.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:system="clr-namespace:System;assembly=mscorlib"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<DataTemplate DataType="{x:Type system:String}" >
<TextBlock>It's a string</TextBlock>
</DataTemplate>
<DataTemplate DataType="{x:Type Line}" >
<TextBlock>It's a line</TextBlock>
</DataTemplate>
</Window.Resources>
<ListView ItemsSource="{Binding MyItems}" />
</Window>
后面的代码是:
using System.Collections.Generic;
using System.Windows;
using System.Windows.Shapes;
namespace WpfTestDataTemplates
{
public partial class MainWindow : Window
{
public List<object> MyItems {get; set; }
public MainWindow()
{
InitializeComponent();
DataContext = this;
MyItems = new List<object>();
MyItems.Add("The first string");
MyItems.Add(new Line { X1 = 0, Y1 = 0, X2 = 5, Y2 = 5 });
MyItems.Add("The second string");
MyItems.Add(new Rectangle { Height = 5, Width = 15 });
MyItems.Add(42);
}
}
}
生成的窗口如下所示:
我希望第二个条目是:这是一行,但似乎Line
找不到该类型的 DataTemplate。对于没有显式 DataTemplate 的类型,我希望默认呈现是对象的 .ToString() 成员,但这也不是正在发生的事情。所以我希望第四个条目是:System.Windows.Shapes.Rectangle
为什么{x:Type Line}
无法识别类型,以及将什么 DataTemplate 应用于 Shape 对象?