由于我经常使用TemplateSelectors
基于类型来区分模板,因此我尝试编写一个TemplateSelector
具有属性来保存类型/模板关系的模板。
我尝试使用x:Array
在 XAML 中设置此属性。这不起作用,因为 VS 抱怨这x:Array
不是一个实现的类,IEnumerable
根据文档它应该
MSDN:
但是 x:Array 也可用于使用 XAML 填充某些属性,这些属性将通用集合支持接口或类作为其结构化属性内容,例如 IEnumerable。
这里对应的代码行
模板选择器
public class TypeMatchDataTemplateSelector : DataTemplateSelector
{
public TypeTemplate[] Templates { get; set; }
...
}
public class TypeTemplate
{
public Type Type { get; set; }
public DataTemplate Template { get; set; }
}
在 XAML 中使用
<x:Array Type="ct:TypeTemplate" x:Key="fooTemplates">
<ct:TypeTemplate
Type="{x:Type logic:NamedRegisterInformation}"
Template="{StaticResource RegisterListTemplate}" />
<ct:TypeTemplate
Type="{x:Type logic:AddressedRegisterInformation}"
Template="{StaticResource RegisterListTemplate}" />
</x:Array>
<ct:TypeMatchDataTemplateSelector
x:Key="foo"
Templates="{StaticResource fooTemplates}"/>
...
...
<ListBox ItemTemplate="{StaticResource blub}">
使用的类型和模板应该是正确的。如果我执行代码,我会在运行时收到此异常:
无法将属性“模板”中的值转换为“EP3_gui.UI.ContentTemplates.TypeTemplate[]”类型的对象。“System.Windows.Markup.ArrayExtension”类型的对象无法转换为“EP3_gui.UI.ContentTemplates.TypeTemplate[]”类型。标记文件 'EP3_gui;component/ui/readmsfrcontrol.xaml' 第 36 行位置 11 中的对象 'blub' 出错。
任何提示我的错误可能在哪里?