0

uwp アプリでWinrtXamlToolkitのTreeViewコントロールを使用しています。条件に応じていくつかの TreeViewItem に異なるスタイルを適用したいので、StyleSelector から派生するクラス TreeViewItemStyleSelector を作成し、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 オーバーライドが呼び出されないことです。理由を知っている人はいますか?

4

1 に答える 1

0

いくつかの理論がありますが、これが機能しない理由はまだわかりません。1 つは、これが実装されていないことです。おそらく、少なくともルート レベルではそれは であるため機能するはずですItemsControlが、(階層的に) 実装されている方法のために、は からにItemContainerStyleSelector転送する必要がありますが、そうではありません。TreeViewTreeViewItems

まだ再現する機会はありませんが、修正したり回避したりする場合は、最初にそのプロパティをHeaderedItemsControl.cs「」と書かれている場所に転送してみます// Note: this is where we would apply the HeaderTemplateSelector (...) (if implemented)。別の方法 (ツールキットのコードを変更したくない場合) は、テンプレートTreeViewItem内で およびのテンプレートを指定するStyleSelectorことです。データ項目ごとに異なるテンプレート部分で a を使用します。

于 2016-07-24T06:14:08.523 に答える