0

首先,我搜索了很长时间,试图找到这个问题的答案。我求助于这里的专家帮助解决这个问题。

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

在您将要看到的以下代码中,有一个滑块和一个文本块。文本块绑定到滑块,因此当滑块移动时,文本块的值会发生变化。已经创建了一个类 TruncationConverter,并且可以在 XAML 中使用关键字“truncate”调用。它在 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 呢?它有什么作用,它的作用是什么?为什么在truncate之前不放StaticResource会报错。

提前致谢!

4

2 回答 2

1

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

“StaticResource”可能看起来无关紧要或多余,因为转换器不能是 DynamicResource,但这就是 Xaml 的语法规则。

于 2011-12-22T22:00:49.990 回答
0

基本上放置 StaticResource 是告诉它可能在 ResourceDictionary 中找到外部属性,该属性具有例如“截断”的功能

因此,就像另一个示例一样,如果我说创建另一个控件或转换器,甚至是画笔或其他实例,我希望在应用程序的其他元素中都可用,它被创建为只能在一个位置编辑的可用资源(资源字典)但所有人都可以使用,例如;静态资源

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

于 2011-12-22T21:52:41.843 回答