Я пытаюсь создать несколько пользовательских видов дерева. Пока все работает нормально, но у меня возникла небольшая проблема со стилями. У меня есть простой стиль "RedBackground", который я добавляю к ресурсам окна. При добавлении нормальных элементов все работает нормально.
При использовании пользовательского шаблона элемента для отображения элементов в виде дерева мой ресурс игнорируется. Если я добавлю ресурс непосредственно в шаблон, он будет работать нормально (как отмечено в коде) ...
Я, очевидно, не хочу добавлять стили к директиве ItemTemplate, это будет очень сложно в дальнейшей разработке. Я думаю, что мне не хватает какой-то «Binding» или «Lookup» ... Я думаю, что это связано со свойствами зависимости ... Или что-то в этом направлении.
Возможно, у кого-то есть больше идей, вот код, создающий шаблон (внутри класса 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;
}
}
Спасибо за любые советы ...
Chris