我在uwp应用中使用TreeView中的WinrtXamlToolkit控件。我想根据条件对一些TreeViewItems应用不同的样式,所以我创建了一个类TreeViewItemStyleSelector,它派生自StyleSelector并覆盖SelectStyleCore函数。
public Style ResourceStyle { get; set; }
public Style ClassroomStyle { get; set; }
protected override Style SelectStyleCore(object item, DependencyObject container)
{
// control never reaches here.
// logic to apply style
}
然后在xaml中我像这样使用它。
在页面资源中
<StyleSelectors:TreeViewItemStyleSelector ResourceStyle="{StaticResource AStyle}" ClassroomStyle = "{StaticResource BStyle}"/>
稍后在页面中。
<wxtControls:TreeView ItemsSource="{Binding StructureViewModels}" ItemContainterStyleSelector="{StaticResource TreeViewItemStyleSelector}" />
问题是从不调用SelectStyleCore覆盖。有人知道为什么吗?
答案 0 :(得分:0)
虽然我有一些理论,但我还不确定这是什么原因并不起作用。一个是 - 这从未实施过。也许至少在根级别它应该有效,因为它是ItemsControl
,但由于它的实现方式(层次结构) - ItemContainerStyleSelector
必须从TreeView
到TreeViewItems
,它不是。
我还没有机会尝试重现它,但如果我试图修复它或解决它 - 我会首先尝试在HeaderedItemsControl.cs
中转发该属性 - 大致在哪里说&#34; // Note: this is where we would apply the HeaderTemplateSelector (...) (if implemented)
&#34;。替代方案(如果您不想修改工具包的代码)可能是指定TreeViewItem
的模板,并在模板中 - 在模板上使用StyleSelector
部分您希望对不同的数据项有所不同。