У меня есть два списка, по умолчанию и пользовательские. Один использует DataTemplateSelector правильно, а другой просто использует стандартные DataTemplates, которые никогда не вызывают селектор;DataTemplateSelector не работает, если ItemContainerStyle установлен
//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 и все еще быть в состоянии изменить DataTamplates с DataTemplateSelector?
EDIT: решаемые, мы должны держать его, поскольку это один из тех нелогичных и не очень хорошо документированных вещей в МОФ.
Чувак, он работает; отметьте это как ответ. – Boris