Silverlight MarkupExtension

时间:2011-01-27 11:39:16

标签: silverlight binding

我正在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

1 个答案:

答案 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}}" />