首先,我花了很长时间努力寻找这个问题的答案。我在这里寻求专家的帮助来解决这个问题。
我目前正在读一本关于Windows phone7编程的书,我正在学习数据绑定(而且也做得很好)。我遇到了一个关于WPF中DataBinding格式化的问题,主要是关于StaticResource的功能。
在下面的代码中,您将看到一个滑块和一个文本块。文本块将绑定到滑块,以便在移动滑块时,文本块的值会发生变化。已经创建了一个类TruncationConverter,可以使用关键字"truncate“在XAML中调用它。它在phone: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放在截断之前,为什么会有一个错误。
提前感谢!
发布于 2011-12-23 05:52:42
基本上,放置StaticResource就是告诉它在ResourceDictionary中查找外部属性,该属性具有例如"truncate“的功能
因此,就像另一个示例一样,如果我说创建另一个控件或转换器,甚至是画笔或其他实例,我希望它在应用程序的其他元素中都可用,它被创建为一个可用的资源,它只能在一个位置(资源字典)中编辑,但可供所有人使用,例如;一个StaticResource
就像您放置滑块和文本块时一样,默认情况下,它会为CoreStyles资源字典中的每个滑块调用一个样式。例如,如果我想要更改它们所做的事情或它们的外观,我可以复制资源,根据需要编辑它,重命名它,然后说call it by
发布于 2011-12-23 06:00:50
Converter类的构造函数使用标记扩展才能工作。标记扩展要求在对象图中预先定义对象,这是在为转换程序类分配一个键时完成的。当Xaml解析器看到StaticResource (或DynamicResource)时,它开始在对象图中向上查找,直到找到该值。在运行时,将创建该类的一个实例,并使用该实例执行转换。一旦创建了转换器的实例,WPF就会在应用程序的生命周期中使用它,因此是“静态的”。
“StaticResource”可能看起来无关紧要或多余,因为转换器不能是DynamicResource,但这就是Xaml的语法规则。
https://stackoverflow.com/questions/8610016
复制相似问题