【问题标题】:Why setting x:Name on Window.Resources items does not work为什么在 Window.Resources 项目上设置 x:Name 不起作用
【发布时间】:2010-09-03 16:38:14
【问题描述】:

我只是好奇为什么当我通过x:Name 访问大多数控件时,对于资源我使用x:Key + 我无法从代码访问它(可以使用this.Resources["keyName"]

【问题讨论】:

    标签: wpf


    【解决方案1】:

    •x:Key:为 ResourceDictionary(或其他框架中的类似字典概念)中的每个资源设置唯一键。 x:Key 可能占典型 WPF 应用程序标记中 x: 用法的 90%。

    •x:Name:为在处理对象元素后存在于运行时代码中的实例指定运行时对象名称。通常,您会经常为 x:Name 使用 WPF 定义的等效属性。此类属性专门映射到 CLR 支持属性,因此更便于应用程序编程,您经常使用运行时代码从初始化的 XAML 中查找命名元素。最常见的此类属性是 FrameworkElement.Name。当特定类型不支持等效的 WPF 框架级 Name 属性时,您仍可以使用 x:Name。这发生在某些动画场景中。

    因此,您必须为资源使用密钥

    早上http://msdn.microsoft.com/en-us/library/ms752059.aspx

    【讨论】:

      【解决方案2】:

      您可以访问任何FrameworkElement 上的资源只要该元素包含任何资源。如果在您的标记中定义,则它必须有 x:Key 并且不能有 x:Name

      例如,如果 Button 包含资源,则必须从其 Resources 集合中访问它。

      var resource = button.Resources["myKey"];
      

      如果您想从对象、其父对象或应用程序中查找资源,请改用FindResource()

      var resource = this.FindResource("myKey");
      

      我不明白你的困惑。

      【讨论】:

      • 也许我会问这个问题:我什么时候使用 x:Name 而不是 x:Key?
      • 您可以将x:Key 用于您定义的任何资源。 x:Name 用于您希望在代码中直接访问的任何元素(不是资源)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-25
      • 2016-04-10
      • 2020-03-19
      • 2021-07-01
      • 2015-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多