Silverlight MarkupExtension - PullRequest
       1

Silverlight MarkupExtension

3 голосов
/ 27 января 2011

Я разрабатываю картографическое приложение в Silverlight. У меня есть тип Polygon, содержащий координаты многоугольника вместе со строкой, содержащей имя ресурса Brush, загруженного в приложение. Я связываю этот объект непосредственно с шаблоном для рисования полигонов. Этот шаблон имеет Fill-свойство типа System.Windows.Media.Brush.

Моя цель - разрешить парсеру xaml выполнить поиск ресурса, учитывая, что у меня есть только имя Brush, а не сам ресурс.

В Silverlight я хочу добиться чего-то похожего на то, что Педро Сампайо показывает в WPF в этом сообщении в блоге: http://www.e -pedro.com / 2009/06 / using-data-binding-with-static-resources -в-МОФ / . Он создал BindableStaticResource, наследующий тип StaticResourceExtension. Затем он может выполнить связывание следующим образом:

<Polygon Fill="{BindableStaticResource {Binding NameOfFillResource}}" />

Очень элегантно! Но кажется, что это не вариант в Silverlight, так как нет никакого типа MarkupExtension для подтипа. Я довольно новичок в Silverlight и не могу придумать хороший, многократно используемый способ реализации этого.

Спасибо! HaraldV

1 Ответ

2 голосов
/ 27 января 2011

Вы правы, нет способа создать свои собственные расширения разметки для silverlight.

Я решаю эту проблему с помощью преобразователя значений. Я отвечал на подобные вещи так часто, что заканчивал тем, что писал в блоге здесь .

Имея источник для 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}}" /> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...