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

Jie*_*eng 4 wpf

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

Kis*_*mar 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

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


Jef*_*ado 3

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

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

var resource = button.Resources["myKey"];
Run Code Online (Sandbox Code Playgroud)

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

var resource = this.FindResource("myKey");
Run Code Online (Sandbox Code Playgroud)

我不明白你的困惑。