我有两个列表框,默认和自定义。一种正确使用 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 更改 DataTamplates?

编辑:
解决了,我们应该保留它,因为这是 wpf 中那些不合逻辑且没有很好记录的事情之一。

最佳答案

知道了:
如果您定义了 ItemContainerStyle,则需要使用 ContentPresenter 中的 ContentTemplateSelector 而不是 ItemTemplateSelector 和 DataTemplateSelector。

<ContentPresenter x:Name="ContentPresenter"  Content="{TemplateBinding  Content}"
               ContentTemplateSelector="{StaticResource ffDataTemplateSelector}"

关于c# - 如果设置了 ItemContainerStyle,则 DataTemplateSelector 不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26145532/

10-12 03:15