2009-11-18 79 views

回答

1

选项1

如果你的子控件都在自己的代码来实现,一个好的办法是:

  1. 创建自定义RoutedEvent
  2. 从父发送路由事件时,你想要通知子控件的某些东西
  3. 处理子控件中的路由事件,并用请求的行为进行响应(例如,如果它们是放置目标,则进行扩展)

您可以向路由事件的EventArgs添加参数,以通知子控件您所通知的更改的具体细节。

选项2

如果你想影响你没有创建并没有控制权的控制,你可以递归下降用VisualTreeHelper.GetChildrenCount()VisualTreeHelper.GetChild()可视化树,让你想要的任何控制变化你发现。这比RoutedEvent方法更强大,但在很多情况下不能提供良好的抽象,导致代码从长远来看难以维护。

选项3

使用继承的附加属性。在父项上设置属性将导致属性传播到每个后代,每次调用您的PropertyChangedCallback。在您的PropertyChangedCallback中,您可以对子控件进行任何更改。

这可能比递归降级视觉树更好,因为如果将新的子控件添加到树中,您也将得到PropertyChangedCallback。这意味着稍后添加的新孩子(例如通过数据绑定)也将获得更新的功能(例如,如果他们是放下目标,它们也会扩展)。另一个优点是继承的属性和逻辑树一样向下传播。缺点是它们可能比VisualTreeHelper技术慢,并且代码稍多。

+0

谢谢你的维修人员。我会在接下来的几周内尝试它,并给你反馈。 – elCapitano 2009-11-25 09:23:50

相关问题