【问题标题】:x:Reference vs Storyboard.TargetNamex:Reference vs Storyboard.TargetName
【发布时间】:2017-11-21 20:46:52
【问题描述】:

在 WPF 中,是否有任何真正的理由使用 Storyboard.TargetName="myElement" 而不是 Storyboard.Target="{x:Reference myElement}"

【问题讨论】:

  • 您在阅读它们的文档时发现了什么?

标签: wpf xaml


【解决方案1】:

我的回答基于this postthis MS forum (has examples with pictures)


MS 没有对此发表评论,尽管通过研究我得出的结论是 ElementName 是要走的路:

  1. ElementName 已针对 UiElements 进行了优化,不适用于非 UIElements
  2. x:Reference 返回对对象的引用。 ElementName 在 VisualTree 中查找对象,因此它已经在内存中。
  3. x:Reference 搜索一个范围(通常是顶级窗口)来搜索元素(例如 Window.UserNameTB),与导航 VisualTree 相比,这很可能会产生性能开销(不能肯定地说,因为我没有编程该功能)。


  • {x:Reference ...} ->
    • 只返回一个对象的引用,它不会像绑定那样在两个属性之间创建“桥梁”。
    • 在所有使用服务的背后,该服务在特定范围内搜索给定名称,通常是窗口本身。


  • {Binding ElementName="..." } ->
    • 创建绑定对象,然后搜索对象名称。搜索算法在 VisualTree 中向上和/或向下移动以找到所需的元素。
    • 因此始终需要功能性的 VisualTree。例如,在非 UiElement 中使用时,它不起作用。最后,Binding 留下来,做它的日常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多