Wpf:将参数传递到ResourceDictionary
有没有办法将参数传递给资源字典?我认为,为了指定事件处理程序,我可以在后面附加代码,但不幸的是,我还需要从事件处理程序访问对父控件的引用。我相信,可以通过在xaml中为资源字典指定x:Class属性,然后在同一文件夹中创建一个类来附加代码隐藏,该类的文件名类似于[resource dictionary name].xaml.cs 其目的是分离我在单个treeview控件中使用的四个层次数据模板的代码。treeview的xaml看起来有点长,有点难看,所以我希望把它分解成四个资源字典。欢迎有任何想法Wpf:将参数传递到ResourceDictionary,wpf,resourcedictionary,Wpf,Resourcedictionary,有没有办法将参数传递给资源字典?我认为,为了指定事件处理程序,我可以在后面附加代码,但不幸的是,我还需要从事件处理程序访问对父控件的引用。我相信,可以通过在xaml中为资源字典指定x:Class属性,然后在同一文件夹中创建一个类来附加代码隐藏,该类的文件名类似于[resource dictionary name].xaml.cs 其目的是分离我在单个treeview控件中使用的四个层次数据模板的代码。treeview的xaml看起来有点长,有点难看,所以我希望把它分解成四个资源字典。欢迎有任何想
Andrew您知道您可以然后根据需要在
树视图中引用这些词典中的数据模板
您知道您可以然后根据需要在树视图中引用这些词典中的数据模板
资源词典听起来有点像做这件事的奇特方法。资源字典都是关于共享实例的-它们允许您从多个位置使用某个事物的单个实例(例如,样式、模板、笔刷或其他)。它们实际上并不是一种将用户界面划分为多个部分以简化单个Xaml文件的机制
将过于复杂的Xaml文件拆分为几个更易于管理的小文件的常用机制是用户控件。(当你已经有了一个资源字典,而且它太大时,资源字典合并就开始发挥作用。但是你通常不会仅仅为了开始拆分东西而引入一个资源字典。相反,资源字典倾向于鼓励过大的Xaml文件,这就是为什么字典合并必须在第一阶段发明的原因(t地点)
大多数时候,当我定义一个数据模板时,我让它只包含一个用户控件。如果这变得更复杂,我会把用户控件分成更多的用户控件
根据您的描述,您的Xaml文件似乎变得很大了,因为其中有四个大的分层数据模板。如果您将每个模板的主体转换为用户控件,那么您的四个模板将变得非常简单,如下所示:
<HierarchicalDataTemplate x:Key="t1" ItemsSource="{Binding Path=Children}">
<loc:TreeItemTypeOne />
</HierarchicalDataTemplate>
您很可能不再需要将这些模板放入单独的文件中。但由于每个模板的核心现在都在用户控件中,这就为您提供了一个放置代码的位置
您提到需要引用父控件。这让我担心——这听起来好像你的代码隐藏中有太多的代码。但一次只做一件事。。。您可以通过在用户控件上定义名为ParentControl的依赖项属性来解决该问题,然后将其放入模板中:
<loc:TreeItemTypeOne
ParentControl="{Binding RelativeSource=
{RelativeSource AncestorType=loc:ParentControlType}}" />
但坦率地说,当我发现自己处于一个需要这样做的位置时,我会问自己:我是如何让自己处于一个似乎有必要这样做的位置的,我能做些什么来解决这个问题呢?资源字典听起来有点奇怪。资源字典都是关于共享实例的-它们允许您从多个位置使用某个事物的单个实例(例如,样式、模板、笔刷或其他)。它们实际上并不是一种将用户界面划分为多个部分以简化单个Xaml文件的机制
将过于复杂的Xaml文件拆分为几个更易于管理的小文件的常用机制是用户控件。(当你已经有了一个资源字典,而且它太大时,资源字典合并就开始发挥作用。但是你通常不会仅仅为了开始拆分东西而引入一个资源字典。相反,资源字典倾向于鼓励过大的Xaml文件,这就是为什么字典合并必须在第一阶段发明的原因(t地点)
大多数时候,当我定义一个数据模板时,我让它只包含一个用户控件。如果这变得更复杂,我会把用户控件分成更多的用户控件
根据您的描述,您的Xaml文件似乎变得很大了,因为其中有四个大的分层数据模板。如果您将每个模板的主体转换为用户控件,那么您的四个模板将变得非常简单,如下所示:
<HierarchicalDataTemplate x:Key="t1" ItemsSource="{Binding Path=Children}">
<loc:TreeItemTypeOne />
</HierarchicalDataTemplate>
您很可能不再需要将这些模板放入单独的文件中。但由于每个模板的核心现在都在用户控件中,这就为您提供了一个放置代码的位置
您提到需要引用父控件。这让我担心——这听起来好像你的代码隐藏中有太多的代码。但一次只做一件事。。。您可以通过在用户控件上定义名为ParentControl的依赖项属性来解决该问题,然后将其放入模板中:
<loc:TreeItemTypeOne
ParentControl="{Binding RelativeSource=
{RelativeSource AncestorType=loc:ParentControlType}}" />
但坦率地说,当我发现自己处于一个需要这个的位置时,我会问自己:我是如何让自己处于一个似乎必要的位置的,我能做些什么来解决这个问题?注意,键不能在单个ResourceDictionary中复制。因此,在合并到更大的资源字典中的两个资源字典中,不能有具有相同键的样式。不太相关,但值得一提。请注意,键不能在单个ResourceDictionary中重复。因此,在合并到更大的资源字典中的两个资源字典中,不能有具有相同键的样式。不太相关,但值得一提。谢谢伊恩,这是一个很棒的答案。我之所以在代码背后遇到这么多麻烦,是因为拖放功能。每个分层数据模板都有一个堆栈面板,可以将其拖动到树中的另一项。我必须设法实施