如果设置了ItemContainerStyle,则DataTemplateSelector不起作用

本文关键字:DataTemplateSelector 不起作用 ItemContainerStyle 设置 如果 | 更新日期: 2023-09-27 18:25:11

我有两个列表框,默认和自定义。一个正确使用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的整体外观,它包含触发器、动画等。如果它存在,Selector就不起作用。

<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,则DataTemplateSelector不起作用

明白了:如果定义了ItemContainerStyle,则需要在ContentPresenter中使用ContentTemplateSelector和DataTemplateSelector,而不是ItemTemplateSelector。

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

mmm代码看起来不错,但您是否尝试过将ItemTemplateSelector设置为这样的

在Generic.xaml 中

<Setter Property="ItemTemplateSelector">
        <Setter.Value>
            <helpers:ffDataTemplateSelector x:Name="ffDataTemplateSelector" />
        </Setter.Value>
    </Setter>

在Generic.xaml 的顶部这样设置helpers

xmlns:helpers="using:[Namespace where ffDataTemplateSelector resides]"
相关文章:
  • 没有找到相关文章