2011-12-22 114 views
0

首先,我搜索了很长时间,很难找到答案。我在这里求助于这个问题的专家。为什么需要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时会出现错误。

在此先感谢!

回答

0

基本上将StaticResource的告诉它来寻找可能在ResourceDictionary中的外部财产持有的比如函数“截断”

所以像另一个例子是,如果我去,说创建另一个控制或转换器或即使是一个笔刷或其他实例,我希望在整个应用程序的其他元素中都可以使用它,它被创建为仅在一个点(资源字典)中可编辑但可供所有人使用的可用资源,例如; a StaticResource

就像您放置滑块和文本块时一样,它默认情况下会调用CoreStyles资源字典中每个找到的样式。如果我想改变他们所做的或者他们想要的东西,例如我可以复制资源,根据需要对其进行编辑,重新命名,然后通过

+0

2011-12-22 21:54:21

1

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

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

+0

这是两个很好的答案!嗯... – parion 2011-12-22 22:17:46

+0

如果你得到了开创性的Petzold文本,“应用程序=代码+标记”,你将有很多WPF内部的很好的参考。 – 2011-12-23 12:26:38