2011-01-27 66 views
3

我開發Silverlight中的地圖應用程序。我有一個Polygon類型,它包含一個多邊形的座標以及一個包含加載到應用程序中的Brush資源名稱的字符串。我將這個對象直接綁定到繪製多邊形的模板上。此模板具有System.Windows.Media.Brush類型的填充索引。的Silverlight的MarkupExtension

我的目標是讓XAML的解析器來完成資源的查找,考慮到我只有刷機的名稱,而不是資源本身。

在Silverlight我想實現類似於佩德羅·桑帕約在WPF展示在這篇博客文章的內容:http://www.e-pedro.com/2009/06/using-data-binding-with-static-resources-in-wpf/。他創建了一個繼承StaticResourceExtension類型的BindableStaticResource。然後他可以這樣做:

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

非常優雅!但是,由於沒有MarkupExtension類型爲子類型,因此它似乎不是Silverlight中的選項。我對Silverlight相當陌生,並不能真正考慮實現這一點的一種好的,可重用的方式。

謝謝! HaraldV

回答

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}}" /> 
+2

僅供參考,標記在Silverlight 5中將支持擴展。 – 2011-01-27 13:00:19