有没有办法将参数传递给资源字典?我认为我可以为了指定事件处理程序而附加代码,但不幸的是,我还需要从事件处理程序访问对父控件的引用。我相信,代码隐藏可以通过在xaml中为资源字典指定x:Class属性,然后在同一文件夹中创建一个类来实现,其文件名类似于[resource dictionary name] .xaml.cs。
目的是分离我在单个树视图控件中使用的四个分层数据模板的代码。树视图的xaml看起来有点长而且难看,所以我希望将它分解为四个资源字典。欢迎任何想法!
安德鲁
答案 0 :(得分:1)
您知道可以merge your Resource Dictionaries然后根据DataTemplate
中的需要引用这些词典中的TreeView
。
答案 1 :(得分:0)
资源词典听起来像是一种略微特殊的方式。资源字典都是关于共享实例的 - 它们允许您使用来自多个地方的单个实例(例如样式,模板,画笔或其他)。它们实际上并不是一种将UI划分为简化单个Xaml文件的机制。
将过于复杂的Xaml文件拆分为几个更易于管理的较小文件的常用机制是用户控件。 (当你已经拥有一个资源字典时,资源字典合并会起作用,并且它太大了。但是你通常不会引入资源字典来开始分裂。相反,资源字典倾向于鼓励过大的Xaml文件,这就是为什么字典合并必须首先发明的原因!)
大多数情况下,当我定义数据模板时,我只包含一个用户控件。如果这变得更复杂,我会将用户控件拆分为更多用户控件。
根据您的描述,听起来您的Xaml文件变得很大,因为您有四个大型分层数据模板。如果您将每个模板的主体转换为用户控件,那么您的四个模板现在变得非常简单 - 如下所示:
<HierarchicalDataTemplate x:Key="t1" ItemsSource="{Binding Path=Children}">
<loc:TreeItemTypeOne />
</HierarchicalDataTemplate>
并且您很可能不再需要将这些模板放入单独的文件中。但是因为每个模板的内容现在都在用户控件中,所以这为您提供了放置代码的位置。
您提到需要对父控件的引用。这让我很担心 - 这听起来好像你的代码背后有太多的代码。但有一件事......你可以通过在用户控件上定义一个名为ParentControl的依赖属性来解决这个问题,然后将其放在模板中:
<loc:TreeItemTypeOne
ParentControl="{Binding RelativeSource=
{RelativeSource AncestorType=loc:ParentControlType}}" />
但坦率地说,一旦我发现自己处于需要这个位置的位置,我就会问自己:我是如何让自己进入一个看似必要的位置,我该怎么办才能解决这个问题?