2016-08-19 4 views
0

У меня есть стиль на ListViewItem, который устанавливает свойство ThemeOverride элемент шаблона стиля с DataTemplateSelector

<Style x:Key="{x:Type ListViewItem}" TargetType="{x:Type ListViewItem}"> 
    <Setter Property="Template" Value="{StaticResource ListViewItemTemplate}"/> 
</Style> 

Однако, в одном из случаев, когда я использую ListView Я хочу использовать DataTemplateSelector чтобы определить, какой шаблон использовать

<Style x:Key="MyListStyle" TargetType="{x:Type ListView}" BasedOn="{StaticResource {x:Type ListView}}"> 
    <Setter Property="ItemTemplateSelector" Value="{StaticResource MyItemTemplateSelector}"/> 
</Style> 

Он применяется как этот

<ListView Style="{StaticResource MyListStyle}/> 

Тем не менее, казалось бы, что стиль в элементе берет верх и этот стиль применяется ко всем элементам ListView. Я нашел this question, у которого была аналогичная проблема, однако решение просто не использует шаблон в стиле Item вообще. Мне нужно это сохранить.

Я играл с ContentTemplateSelector по рестайлинга ListViewItems в этом ListView

<Style x:Key="MyItemStyle" BasedOn="{StaticResource {x:Type ListViewItem}}" TargetType="{x:Type ListViewItem}"> 
    <Setter Property="ContentTemplateSelector" Value="{StaticResource MyItemTemplateSelector}"/> 
</Style> 

Однако шаблон на другой стиль используется вместо этого. Если я попробую обнулить шаблон, то ничего не появится вообще!

<Setter Property="Template" Value="{x:Null}"/ 

Есть ли способ, что я могу заменить шаблон на ListViewItems для данного элемента управления ListView, сохраняя при этом остальной части моего стиля?

+0

Во-первых, DataTemplateSelector не является стилем. Во-вторых, как вы пытались применить MyItemStyle? Вы определили его. Что еще вы сделали, чтобы применить его? –

+0

'': Кто-нибудь когда-нибудь говорил вам, что эффект Setter полностью зависит от *, где он находится *? Итак, почему отказываются делиться этой информацией? –

+0

@EdPlunkett для вашего первого пункта. Я обновлю свой вопрос, чтобы показать, как применяется стиль. Для вашего второго пункта, нет. Вы можете уточнить? – Boumbles

ответ

0

Мне не удалось переопределить шаблон, установленный в ListViewItem в стиле ListView.

Чтобы обойти это, я заменил Template на ListViewItem другим ItemTemplateSelector в моем базовом стиле ListView. Этот селектор всегда возвращает мой исходный шаблон. В моем дочернем стиле ListView используется новый ItemTemplateSelector.