如何通知WPF中的所有subControls
他们应该扩展?
并非每个SubControl
都会被通知..只有那些可以通过接受另一个要素掉落。
也许你知道另一个可能性,让物品在接受特定的dropContent
时改变颜色。
答案 0 :(得分:1)
选项1
如果您的子控件是在您自己的代码中实现的,那么最好的方法是:
RoutedEvent
您可以向路由事件的EventArgs
添加参数,以通知子控件您正在通知他们的更改的具体细节。
选项2
如果您想影响您没有创建且无法控制的控件,可以使用VisualTreeHelper.GetChildrenCount()
和VisualTreeHelper.GetChild()
以递归方式下降可视树,并根据需要对控件进行任何更改找。这比RoutedEvent方法更强大,但在许多情况下不能提供良好的抽象,导致代码从长远来看更难维护。
选项3
使用继承的附加属性。在父项上设置属性将导致属性向下传播到每个后代,每次调用PropertyChangedCallback
。在PropertyChangedCallback
中,您可以对子控件进行任何更改。
这可能比递归下降可视树更好,因为如果将新的子控件添加到树中,您也将获得PropertyChangedCallback
s。这意味着稍后添加的新子项(例如通过数据绑定)也将获得更新的功能(例如,如果它们是丢弃目标,它们也将扩展)。另一个优点是继承的属性沿逻辑树和视觉传播。缺点是它们可能比VisualTreeHelper
技术慢,而且代码稍多。