2011-01-27 4 views
3

私はSilverlightの地図アプリケーションを開発しています。ポリゴンの座標と、アプリケーションにロードされたBrushリソースの名前を含む文字列を含む多面体の型があります。このオブジェクトをポリゴンを描画するためのテンプレートに直接バインドしています。このテンプレートには、System.Windows.Media.Brush型のFillプロパティがあります。SilverlightのMarkupExtension

私の目標は、私が唯一のブラシの名前ではなく、リソース自体を持って考えると、XAMLパーサーは、リソースの検索を行うようにすることです。 http://www.e-pedro.com/2009/06/using-data-binding-with-static-resources-in-wpf/:Silverlightの

私はペドロ・サンパイオは、このブログ記事でWPFに示したものと同様のものを達成したいです。彼はStaticResourceExtension-typeを継承したBindableStaticResourceを作成しました。それで、彼はこのような束縛をすることができます:

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

非常にエレガント!しかし、SilverlightではMarkupExtension-typeからsubtypeがないため、これはオプションではないようです。私はSilverlightをかなり新しくしており、これを実装するための良い、再利用可能な方法を考えることはできません。

ありがとうございます! HaraldV

答えて

2

あなたは、Silverlightの独自のマークアップ拡張機能を作成方法はありませんが正しいです。

私は、値変換でこの種の問題を解決します。私はこの種の事に答えてきたので、頻繁にそれをブログに書きました。hereStringToObjectConverterのソースで

あなたがどこかのリソースで、コンバータのインスタンスを配置することができ、プロジェクト内: -

 <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> 

を、あなたのなりますバインディングのように: - FYI

<Polygon Fill="{Binding NameOfFillResource, Converter={StaticResource StatusToBrush}}" /> 
+2

、マークアップ拡張機能はSilverlight 5でサポートされます。 –

+0

@リチャード:あなたは個人的な保証をしていますか? ;)これまでのベータ版でも、最終製品にすることはできません。 – AnthonyWJones

+0

真実ですが、Silverlight Firestarterイベントに表示される機能は安定していて、保証できなかった(または準備ができていない)機能は表示されませんでした。 Markup Extensionsがイベントのフィーチャーとしてリストされたので、それは公正な保証だと思います。 Scott Guはまた、SL5での.NET Rocksのインタビューで再びMEを紹介しました。 –

関連する問題