【发布时间】:2012-11-15 22:45:15
【问题描述】:
我正在尝试设置一个可以用作通用模板的 Treeview 后代类 我的应用程序中的所有 Treeview 实例,但每个实例都有额外的格式和模板。
对于基础,我有一个继承自 Treeview 的 UserControl,具有通用样式和单个标准数据模板
<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 并为我正在显示的特定 TreeviewItem 添加额外的数据模板。
例如
<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 实例。”
有什么办法可以解决这个问题,或者有人可以建议一种更好的方法来设置基本树视图模板和多个后代版本。
【问题讨论】:
-
看起来它对设置资源两次感到不满,所以你必须删除一个。也许在以后的事件中以编程方式填充基本控件(BaseTreeView)资源?加载,也许?不得不放弃代码,但会解决眼前的问题。