2010-06-08 45 views
2

我知道调用FrameworkElement(例如窗口)上的FindResource()可以用来在FrameworkElement的ResourceDictionary中查找资源。为什么FrameworkElement的FindResource()方法接受一个对象而不是字符串?

例如,我已经多次使用它来访问样式代码,以动态地向样式添加新的设置器。我总是将Style的x:Key值作为字符串传递给FindResource()方法。像... Style style = w.FindResource("GridDescriptionColumn") as Style;

我的问题是,我注意到FindResource()接受一个类型为object的参数,而不是string类型的参数。我无法想象我想用一个不是字符串的参数调用FindResource()的原因。这让我觉得我可能没有意识到使用FindResource()的其他方法。

有谁知道为什么FindResource()接受参数类型的对象而不是字符串?如果是这样,那么调用FindResource()的参数类型不是字符串的例子是什么?

谢谢。

回答

9

资源可以将任何对象作为关键字。在后面的代码中添加一个带有对象键的资源非常简单,而且非常有用。在XAML中,大多数时候你使用的字符串是x:Key。不过还有的地方,关键是不是一个字符串一个常见的情况,你甚至可能没有意识到这一点使用:

Style没有x:Key,它应用到其TargetType的每个实例。但是编译时添加了一个隐含的关键字:TargetType本身的类型。

简而言之,在资源部分中编写<Style TargetType="{x:Type Button}" />与编写<Style TargetType="{x:Type Button}" x:Key="{x:Type Button}" />完全相同。要从代码中获取此资源,必须使用FindResource(typeof(Button)),传递Type而不是string

相关问题