为什么需要StaticResource?

时间:2011-12-22 21:38:29

标签: wpf windows-phone-7 data-binding staticresource

首先,我搜索了很长时间并努力寻找答案。我在这里求助于这个问题的专家帮助。

我目前正在阅读一本关于Windows Phone 7编程的书。我目前正在学习数据绑定(并且做得非常好)。我遇到过一个关于WPF中DataBinding格式的问题,主要是关于StaticResource的功能。

在下面的代码中,您将看到,有一个滑块和一个文本块。文本块绑定到滑块,以便在移动滑块时,文本块的值会更改。已经创建了一个类,TruncationConverter,并且可以在XAML中使用关键字“truncate”调用它。它在电话中声明:ApplicationPage.Resources。

所以,这是对的

    <TextBlock Name="txtblk"
Text="{Binding ElementName=slider,
Path=Value,
Converter={StaticResource truncate}}"

这是错误的

<TextBlock Name="txtblk"
Text="{Binding ElementName=slider,
Path=Value,
Converter=truncate}"

这本书从未真正解释为什么必须在函数之前放置StaticResource。

所以,问题是,为什么你需要在调用之前放置StaticResource?它做什么,它的功能是什么?如果在截断前没有放置StaticResource,为什么会出现错误。

提前致谢!

2 个答案:

答案 0 :(得分:1)

Converter类的构造函数使用标记扩展来工作。标记扩展要求先在对象图中定义对象,这是在为转换器类指定密钥时完成的。当Xaml解析器看到StaticResource(或DynamicResource)时,它开始在对象图中向上查找,直到找到该值。在运行时,将创建该类的实例并用于进行转换。一旦创建了转换器的实例,WPF就会在应用程序的生命周期内使用它,因此“静态”。

'StaticResource'可能看起来多余或多余,因为转换器不能是DynamicResource,但这是Xaml的语法规则。

答案 1 :(得分:0)

基本上放置StaticResource告诉它在ResourceDictionary中找到可能包含例如“truncate”函数的外部属性

因此,如果我去创建另一个控件或转换器,甚至是刷子或其他实例,我希望在应用程序的其他元素中可用,那么它就像另一个例子一样,它被创建为可编辑的可用资源一个点(资源字典)但可供所有人使用,例如;一个StaticResource

就像放置滑块和Textblock一样,默认情况下它会为CoreStyles资源字典中找到的每个调用样式。如果我想改变他们所做的或者他们看起来如何,我可以复制资源,根据需要进行编辑,重命名,然后通过

来调用它