我们正在编写一个非常专业的ItemsControl
,实际上每个'行'有三个ContentPresenter
个,每个'绑定到一个不同的对象(想想穷人的网格)而不是更常见的一个,就像ListBox
。
现在使用ListBox
如果您没有明确指定ItemTemplate
或ItemTemplateSelector
,则似乎有一些内部选择器仅根据数据类型应用模板。但是,我们的ContentPresenter
并未将其提升。我们也尝试将它们转换为ContentControl
,但这也没有用。
现在我知道我可以简单地编写我自己的DataTypeTemplateSelector
这样做了,但是我想知道这个功能是否已经被“烘焙”在某个地方被认为是用于那么多ItemsControl
的( ListBox
,TreeView
,ComboBox
',DataGrid
等)并根据此MSDN文章......
http://msdn.microsoft.com/en-us/library/ms742521.aspx
......它应该默认工作!但同样,它没有。
这是我们的(伪)代码......
<UserControl.Resources>
<!-- These all work when the relevant items are in a ListBox,
but not with stand-alone ContentPresenters or ContentControls -->
<DataTemplate DataType="local:SomeTypeA">
<TextBlock Text="{Binding Converter={c:DataTypeNameConverter}}" Foreground="Blue" />
</DataTemplate>
<DataTemplate DataType="local::SomeTypeB">
<TextBlock Text="{Binding Converter={c:DataTypeNameConverter}}" Foreground="Purple" />
</DataTemplate>
<DataTemplate DataType="local::SomeTypeC">
<TextBlock Text="{Binding Converter={c:DataTypeNameConverter}}" Foreground="Purple" />
</DataTemplate>
</UserControl.Resources>
<!-- These don't pick up the templates -->
<ContentControl Content="{Binding Field1}" />
<ContentPresenter Content="{Binding Field2}" />
<!-- This however does -->
<ListBox ItemsSource="{Binding AllItems}"
所以...有人想为什么不刺?