我正在Silverlight中开发一个地图应用程序。我有一个Polygon类型,包含多边形的坐标以及一个包含加载到应用程序中的Brush资源名称的字符串。我将此对象直接绑定到用于绘制多边形的模板。此模板具有System.Windows.Media.Brush类型的Fill-propery。
我的目标是让xaml-parser查找资源,考虑到我只有Brush的名称,而不是资源本身。
在Silverlight中,我想要在这篇博客文章{@ 3}}中实现类似于Pedro Sampaio在WPF中展示的内容。他创建了一个继承StaticResourceExtension类型的BindableStaticResource。然后他可以这样做绑定:
<Polygon Fill="{BindableStaticResource {Binding NameOfFillResource}}" />
非常优雅!但似乎这不是Silverlight中的一个选项,因为没有MarkupExtension类型到子类型。我是Silverlight的新手,并不能真正想到一个实现这个的好的,可重用的方法。
谢谢! HaraldV
答案 0 :(得分:2)
你是对的,无法为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>
然后您的绑定将如下所示: -
<Polygon Fill="{Binding NameOfFillResource, Converter={StaticResource StatusToBrush}}" />