【发布时间】:2014-10-01 15:58:54
【问题描述】:
我有两个列表框,默认和自定义。一个正确使用 DataTemplateSelector,另一个只使用默认的 DataTemplates 从不调用选择器;
//shows correctly
<ListBox Name="testlb" ItemTemplateSelector="{StaticResource ffDataTemplateSelector}"/>
//now showing correctly (using default DataTemplates instead of selector)
<local:FFBox x:Name="myFFBox" ItemTemplateSelector="{StaticResource ffDataTemplateSelector}" ItemContainerStyle="{StaticResource FFItemStyle}" />
两者来源相同
testlb.ItemsSource = CollectionViewSource.GetDefaultView(FileCollectionView);
myFFBox.ItemsSource = CollectionViewSource.GetDefaultView(FileCollectionView);
显然 DataTemplateSelector 没有任何问题,因为它在 testlb 上正常工作
问题是ItemContainerStyle="{StaticResource FFItemStyle}",我用它来定义每个 ListBoxItem 的整体外观,包含触发器、动画等。如果存在,则选择器不起作用。
<Style x:Key="FFItemStyle" TargetType="{x:Type ListBoxItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Grid x:Name="mygrid">
<ContentPresenter x:Name="ContentPresenter"
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}"/>
如何在保留 ItemContainerStyle 的同时仍然能够使用 DataTemplateSelector 更改 DataTamplate?
编辑: 解决了,我们应该保留它,因为这是 wpf 中那些不合逻辑且没有很好记录的事情之一。
【问题讨论】: