我们正在编写一个非常专业ItemsControl
的,实际上ContentPresenter
每行有三个 ',每个绑定到不同的对象(想想穷人的网格),而不是更常见的对象,比如ListBox
.
现在,ListBox
如果您没有明确指定 anItemTemplate
或 an ItemTemplateSelector
,则似乎有一些内部选择器纯粹基于数据类型应用模板。但是,我们ContentPresenter
的 's 并没有接他们。我们也尝试将它们切换为ContentControl
's,但这也没有奏效。
现在我知道我可以简单地编写我自己的DataTypeTemplateSelector
来执行此操作,但我想知道该功能是否已经“烘焙”在某个被认为与这么多ItemsControl
's ( 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}"
所以......有人想试一试,为什么不呢?