【问题标题】:DataTemplateSelector not working if ItemContainerStyle is set如果设置了 ItemContainerStyle,DataTemplateSelector 不起作用
【发布时间】: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 中那些不合逻辑且没有很好记录的事情之一。

【问题讨论】:

    标签: c# wpf xaml listbox


    【解决方案1】:

    知道了: 如果您定义了 ItemContainerStyle,则需要在 ContentPresenter 中将 ContentTemplateSelector 与 DataTemplateSelector 一起使用,而不是 ItemTemplateSelector。

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

    【讨论】:

      【解决方案2】:

      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]"
      

      【讨论】:

      • 请参阅编辑。拥有 ItemContainerStyle 是问题,但我不知道如何保留它并仍然使用选择器
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-19
      • 1970-01-01
      • 2013-05-02
      • 1970-01-01
      相关资源
      最近更新 更多