我正在 Silverlight 中开发 map 应用程序。我有一个 Polygon 类型,包含一个多边形的坐标和一个包含加载到应用程序中的 Brush 资源名称的字符串。我将此对象直接绑定(bind)到用于绘制多边形的模板。此模板具有 System.Windows.Media.Brush 类型的填充属性。
我的目标是让 xaml-parser 查找资源,考虑到我只有 Brush 的名称而不是资源本身。
在 Silverlight 中,我想实现类似于 Pedro Sampaio 在 WPF 中展示的内容,在这篇博文中:http://www.e-pedro.com/2009/06/using-data-binding-with-static-resources-in-wpf/ .他创建了一个继承 StaticResourceExtension 类型的 BindableStaticResource。然后他可以像这样进行绑定(bind):
<Polygon Fill="{BindableStaticResource {Binding NameOfFillResource}}" />
非常优雅!但似乎这不是 Silverlight 中的一个选项,因为没有可用于子类型的 MarkupExtension 类型。我对 Silverlight 还很陌生,真的想不出一个好的、可重用的实现方法。
谢谢! 哈拉尔德V
最佳答案
你是对的,没有办法为 silverlight 创建你自己的标记扩展。
我用值转换器解决了这类问题。我经常回答这类事情,所以我最终将其写成博客 here .
在项目中使用 StringToObjectConverter
的源代码,您可以将转换器的实例放置在资源中的某处:-
<local:StringToObjectConverter x:Key="StatusToBrush">
<ResourceDictionary>
<SolidColorBrush Color="Red" x:Key="Overdue" />
<SolidColorBrush Color="Orange" x:Key="Urgent" />
<SolidColorBrush Color="Silver" x:Key="__default__" />
</ResourceDictionary>
</local:StringToObjectConverter>
然后您的绑定(bind)将如下所示:-
<Polygon Fill="{Binding NameOfFillResource, Converter={StaticResource StatusToBrush}}" />
关于Silverlight 标记扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4815839/