Wpf 在CustomControl中传递对象

Wpf 在CustomControl中传递对象,wpf,user-controls,wpf-controls,itemscontrol,Wpf,User Controls,Wpf Controls,Itemscontrol,我正在处理一个自定义控件,我想知道将一些自定义属性从我的ItemsControl传递到我的ItemsContainers的最佳方法是什么。属性是一些自定义值,ItemsContainer应该能够使用这些值 有人在创建自定义控件时遇到过同样的问题吗?在代码中最常见的解决方法是什么 我认为使用DataTriggers或从ItemsContainer的ControlTemplate绑定到RelativeSource并不是最好的方法 是否有面向对象的方法来解决此问题?如果您不想使用DataTrigger

我正在处理一个自定义控件,我想知道将一些自定义属性从我的
ItemsControl
传递到我的
ItemsContainer
s的最佳方法是什么。属性是一些自定义值,
ItemsContainer
应该能够使用这些值

有人在创建自定义控件时遇到过同样的问题吗?在代码中最常见的解决方法是什么

我认为使用DataTriggers或从ItemsContainer的ControlTemplate绑定到RelativeSource并不是最好的方法


是否有面向对象的方法来解决此问题?

如果您不想使用
DataTrigger
s或相关绑定,您可以创建自己的
ItemsControl
ItemsControl
容器(例如通过继承
ListBox
ListBoxItem
)然后通过重写来实例化具有特定属性的容器,最后将自定义控件属性绑定到容器上定义的属性


话虽如此,使用
DataTriggers
并在ViewModels上管理这些属性并没有什么错。

我认为这是您所需要的。在uses控件中定义一些,并在xaml中设置它们,例如绑定。

我认为DataTriggers是最后一个性能,因为每个项都必须找到祖先。这就是为什么我目前正在寻找一种面向对象的方法。数据触发器是否会对图形性能产生不良影响?您是否有将DependencyObject传递给ItemsContainers的GetContainerForItemOverride示例?DataTriggers使用
绑定
,因此如果广泛使用,从内存和性能角度来看,它们可能是不好的
GetContainerForItemOverride
基本上只返回一个新容器。例如,在ListBox的情况下,它将只执行:returnnewListBoxItem();在您的例子中,您可以执行如下操作:返回新的MyListBoxItem(){MyCustomProperty=some_value};您还可以使用
ItemsControl.PrepareContainerForItemOverride
方法自定义容器。您是否曾在每个TreeView项目中使用RelativeSource来查找并绑定到TreeView中的属性?假设您有3个深度级别,没有虚拟化,每个级别包含大约500个项目。在这种情况下,我该怎么办?我认为在这样的情况下,在创建和管理所有视觉效果的成本之前,单个相对绑定的成本是可以忽略的。当然,我正在使用DependencyProperties,但我正在寻找一种快速的方法,在我的ItemsContainers中使用ItemsControl中的dp。:)是的,我完全误解了这个问题。道歉。我在你描述的案例中使用了相对资源。我认为使用它绑定到一些常见的usercontrol值没有什么错。您是否有过在每个TreeView项目中使用RelativeSource绑定到TreeView属性的案例?假设您有3个深度级别,没有虚拟化,每个级别包含大约500个项目。不,不是真的。我认为你应该考虑用这个信息来扩展你的问题。