我只是好奇为什么当我通过x:Name
访问大多数控件时,对于我使用x:Key
执行此操作的资源+我无法从代码访问它(可以使用this.Resources["keyName"]
)
答案 0 :(得分:5)
•x:Key:为ResourceDictionary中的每个资源(或其他框架中的类似字典概念)设置唯一键。 x:密钥可能占您在典型WPF应用程序标记中看到的x:用法的90%。
•x:Name:指定处理对象元素后存在于运行时代码中的实例的运行时对象名称。通常,您将经常为x:Name使用WPF定义的等效属性。这些属性专门映射到CLR支持属性,因此更方便应用程序编程,您经常使用运行时代码从初始化的XAML中查找命名元素。最常见的此类属性是FrameworkElement.Name。当特定类型不支持等效的WPF框架级Name属性时,您仍可以使用x:Name。这种情况发生在某些动画场景中。
因此你必须使用Key for the Resources
答案 1 :(得分:3)
只要元素包含任何资源,您就可以访问任何FrameworkElement
上的资源。如果在您的标记中定义,则该标记必须为x:Key
且不能为x:Name
。
例如,如果按钮包含资源,则必须从其Resources
集合中访问它。
var resource = button.Resources["myKey"];
如果要从对象,其父项或应用程序中查找资源,请改用FindResource()
。
var resource = this.FindResource("myKey");
我不明白你的困惑。