首先,我搜索了很长时间并努力寻找答案。我在这里求助于这个问题的专家帮助。
我目前正在阅读一本关于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,为什么会出现错误。
提前致谢!
答案 0 :(得分:1)
Converter类的构造函数使用标记扩展来工作。标记扩展要求先在对象图中定义对象,这是在为转换器类指定密钥时完成的。当Xaml解析器看到StaticResource(或DynamicResource)时,它开始在对象图中向上查找,直到找到该值。在运行时,将创建该类的实例并用于进行转换。一旦创建了转换器的实例,WPF就会在应用程序的生命周期内使用它,因此“静态”。
'StaticResource'可能看起来多余或多余,因为转换器不能是DynamicResource,但这是Xaml的语法规则。
答案 1 :(得分:0)
基本上放置StaticResource告诉它在ResourceDictionary中找到可能包含例如“truncate”函数的外部属性
因此,如果我去创建另一个控件或转换器,甚至是刷子或其他实例,我希望在应用程序的其他元素中可用,那么它就像另一个例子一样,它被创建为可编辑的可用资源一个点(资源字典)但可供所有人使用,例如;一个StaticResource
就像放置滑块和Textblock一样,默认情况下它会为CoreStyles资源字典中找到的每个调用样式。如果我想改变他们所做的或者他们看起来如何,我可以复制资源,根据需要进行编辑,重命名,然后通过
来调用它