いくつかのカスタム ツリービューを作成しようとしています。これまでのところすべて正常に機能していますが、スタイルに少し問題がありました。ウィンドウのリソースに追加する単純な「RedBackground」スタイルがあります。通常の要素を追加すると、正常に機能します。
カスタム アイテム テンプレートを使用してツリービュー アイテムをレンダリングすると、リソースが無視されます。リソースをテンプレートに直接追加すると、正常に機能します(コードでマークされているように)...
私は明らかに、スタイルを ItemTemplate ディレクトリに追加する必要はありません。今後の開発では非常に複雑になります。ある種の「バインディング」または「ルックアップ」が欠落していると思います...依存関係プロパティに関連していると思います...またはこの方向の何か。
おそらく誰もがより多くの洞察を持っています。これはテンプレートを作成するコードです(utilクラス内ですが、すべてをきれいに保つためだけです):
 var hdt = new HierarchicalDataTemplate(t)
                      {
                          ItemsSource = new Binding("Children")
                      };
        var tb = new FrameworkElementFactory(typeof (TextBlock));
        tb.SetBinding(TextBlock.TextProperty, new Binding("Header"));
        hdt.VisualTree = tb;
        // This way it works...
        TextBlockStyles.AddRedBackground(hdt.Resources);
        return hdt;
そして、ここで私の非常に単純なカスタム ツリー ビュー
    public class TreeViewCustom<T> : TreeView 
{
    public TreeViewCustom()
    {
        MinWidth = 300;
        MinHeight = 600;
        ItemTemplate = TreeViewTemplates.TryGetTemplate(typeof(T));
        // This is ignored.... (Also when set as resource to window)
        TextBlockStyles.AddRedBackground(Resources);
    }
}
わかりました。確かに、スタイルを作成するコードは次のとおりです。
public static class TextBlockStyles
{
    public static void AddRedBackground(ResourceDictionary r)
    {
        var s = CreateRedBackground();
        r.Add(s.TargetType, s);
    }
    private static Style CreateRedBackground()
    {
        var s = new Style(typeof(TextBlock));
        s.Setters.Add(new Setter
        {
            Property = TextBlock.BackgroundProperty,
            Value = new SolidColorBrush(Colors.Red)
        });
        return s;
    }
}
ヒントをありがとう...クリス