为什么在Window.Resources项上设置x:Name不起作用

时间:2010-09-03 07:51:39

标签: wpf

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

2 个答案:

答案 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

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

答案 1 :(得分:3)

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

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

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

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

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

我不明白你的困惑。