【问题标题】:WPF internal : Why UserControl is overriding AdjustBranchSource?WPF 内部:为什么 UserControl 覆盖 AdjustBranchSource?
【发布时间】:2009-03-15 21:02:36
【问题描述】:

通过使用反射器,您可以看到 WPF UserControl 正在覆盖 AdjustBranchSource。

    internal override void AdjustBranchSource(RoutedEventArgs e)
{

   e.Source = this;

}

我自己的问题是由该问题引起的不一致。 当元素基于用户控件内部或外部时。 Source 参数的行为不同。令我惊讶的是,源应该始终是 RoutedEvent 的目标元素。

问题是为什么要这样实现?

【问题讨论】:

    标签: c# .net wpf internals


    【解决方案1】:

    这有点道理。如果您将 UserControl 视为一个黑盒子,那么您不应该知道上面有哪些控件,也不知道事件的来源。

    如果您需要区分 UserControl 上的不同按钮,那么 UserControl 应该有它自己的按钮触发的事件。这样从外部看,它看起来像是正确的事件,并且 UserControl 的用户不需要知道哪个按钮执行了哪个事件。

    举个例子,在列表框上,您是否需要知道向下滚动按钮是发送原始事件的按钮?还是只需要知道触发了向下滚动事件。

    【讨论】:

      【解决方案2】:

      路由事件的源可以在事件的整个路由过程中发生变化。我不完全确定为什么 UserControl 会更改它,但你能不能只使用 RoutedEventArgs 上的 OriginalSource 属性来代替?

      【讨论】:

      • 我可能会,这很痛苦。您将获得 ButtonChrome 或其他类似部件的元素。之后,您将需要从可视树中推断出元素。不漂亮。
      猜你喜欢
      • 1970-01-01
      • 2019-10-17
      • 1970-01-01
      • 1970-01-01
      • 2011-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-20
      相关资源
      最近更新 更多