Я пытаюсь настроить класс-потомок Treeview, который можно использовать в качестве общего шаблона для всех экземпляров Treeview в моем приложении, но с дополнительным форматированием и шаблонами для каждого экземпляра.
Для базы:У меня есть UserControl, который происходит от Treeview, с общими стилями и единым стандартным шаблоном данных
<TreeView x:Class="BaseTreeView" ... >
<TreeView.ItemContainerStyle> ... </TreeView.ItemContainerStyle>
<TreeView.Resources>
<HierarchicalDataTemplate ItemsSource="{Binding Children}" DataType="{x:Type local:BaseTreeViewItem}">
<TextBlock Text="{Binding Caption}" />
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
Затем в каждом окне я использую этот расширенный Treeview и добавляю дополнительные шаблоны данных для конкретных TreeviewItems, которые яdisplaying.
например,
<Window x:Class="Window1" ... >
...
<BaseTreeView ItemsSource="{Binding RootTreeItems}" >
<MyTreeView.Resources>
<HierarchicalDataTemplate ItemsSource="{Binding Children}" DataType="{x:Type ExtendedTreeViewItem1}">
<StackPanel Orientation="Horizontal">
<Image Source="Images/Image1.png" />
<TextBlock Text="{Binding Caption}" />
</StackPanel>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type ExtendedTreeViewItem2}">
<StackPanel Orientation="Horizontal">
<Image Source="Images/Image2.png" />
<TextBlock Text="{Binding Caption}" />
</StackPanel>
</DataTemplate>
</MyTreeView.Resources>
</BaseTreeView>
...
</Window>
Компилируется нормально, но во время выполнения я получаю ошибку
"'Установить свойство' System.Windows.ResourceDictionary.DeferrableContentбросил исключение.Номер строки '27' и позиция строки '59'. "
" Невозможно повторно инициализировать экземпляр ResourceDictionary. "
Есть ли способ обойти это, или кто-то может предложить лучшеспособ настроить базовый шаблон дерева и несколько версий потомков.