いくつかのカスタム ツリービューを作成しようとしています。これまでのところすべて正常に機能していますが、スタイルに少し問題がありました。ウィンドウのリソースに追加する単純な「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;
}
}
ヒントをありがとう...クリス