资源字典听起来像一个有点奇怪的方式来做到这一点。资源字典都是关于共享实例 - 它们让你可以在多个地方使用一个实例(例如风格,模板,画笔或其他)。它们并不是真正的用于分割用户界面以简化各个Xaml文件的机制。
将过度复杂的Xaml文件分割成几个更易于管理的小文件的通常机制是用户控制。 (资源字典合并当你已经有一个资源字典时就会起作用,并且它太大了,但是你通常不会引入一个资源字典来开始分解东西,相反,资源字典倾向于鼓励过度大的Xaml文件,这就是为什么字典合并必须首先发明的原因!)
大多数情况下,当我定义数据模板时,我将它仅包含一个用户控件。如果这变得更加复杂,我会将该用户控件分成更多的用户控件。
从您的描述来看,这听起来像您的Xaml文件变得很大,因为您已经有四个大型的分层数据模板。如果你把每个模板的身体,把它变成一个用户控件,你的4个模板现在将变得非常简单 - 是这样的:
<HierarchicalDataTemplate x:Key="t1" ItemsSource="{Binding Path=Children}">
<loc:TreeItemTypeOne />
</HierarchicalDataTemplate>
和你最有可能不再需要把这些模板为单独的文件。但是,因为每个模板的内容现在都在用户控件中,所以可以让您放置代码。
您提到需要对父控件的引用。这让我很担心 - 这听起来像是你的代码隐藏了太多的代码。但有一件事的时候,你可以通过定义用户控件调用ParentControl依赖属性解决这个问题,然后把这个模板:
<loc:TreeItemTypeOne
ParentControl="{Binding RelativeSource=
{RelativeSource AncestorType=loc:ParentControlType}}" />
但坦率地说,当我发现自己在我需要这个职位的时候,我问自己:我如何让自己进入一个看起来有必要的位置,我能做些什么来解决这个问题?
谢谢伊恩,这是一个很棒的答案。我在代码隐藏方面遇到很多麻烦的原因是因为拖放功能。每个分层数据模板都有一个可以拖动到树中另一个项目的堆栈面板。我必须努力实现这一点,然后才能正确回答答案,但我会回来的。对于我来说,要想得出这些结论将会一直持续下去!很好的答案! – Andrew 2010-11-28 15:09:24