2016-07-07 60 views
0

我在一个uwp应用程序中使用WinrtXamlToolkitTreeView控件。我想根据条件对某些TreeViewItems应用不同的样式,所以我创建了一个类TreeViewItemStyleSelector,它从StyleSelector派生并重写SelectStyleCore函数。WinrtXamlToolkit TreeView ItemContainerStyleSelector not firing

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

我可以重现您的问题。但找不到解决办法。我在WinRTXamlToolKit的Github上发布了一个问题。让我们等待回应。:) –

+0

响应来得晚,不完整,但它是一个响应... :) –

回答

0

我不确定这是行不通的原因是什么,尽管我有一些理论。一个是 - 这从未实现过。或许至少在根层面它应该工作,因为它是ItemsControl,但由于它的实施方式(分层) - ItemContainerStyleSelector必须从TreeView转发到TreeViewItems,事实并非如此。

我还没有尝试重现它的机会,但如果我试图修复它或解决它 - 我会首先尝试转发HeaderedItemsControl.cs中的该属性 - 大致在那里显示“// Note: this is where we would apply the HeaderTemplateSelector (...) (if implemented)”。替代方案(如果您不想修改工具包的代码)可能需要指定TreeViewItem和模板中的模板 - 在模板部件上使用StyleSelector,这些模板部件要针对不同的数据项目进行区分。

+0

感谢您的回答。我已经选择了2,同时篡改了TreeViewItem的风格。再次感谢您抽出宝贵时间来看看这个和一个很棒的工具包:) – Corcus