2011-06-15 61 views
2

我正在爲其他供應商提供的WPF Composite應用程序編寫一些擴展模塊。該應用程序是主題化的,並允許用戶從多個主題中進行選擇,這些主題將改變整個應用程序的外觀,包括任何自定義模塊,這些模塊會自行向主題管理器註冊。如何發現在另一個程序集中定義的WPF資源?

我真的希望我的自定義擴展看起來像一個集成組件,所以我試圖只使用在主應用程序中定義爲資源的樣式。由於我仍然在學習XAML的細微差別,所以我的造型更多的是反覆試驗。

我想知道是否有一種方式來「發現」不同裝配中可用的樣式。這是我目前正在做的一個例子。

<Window.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <common:DesignTimeResourceDictionary Source="/Vendor.Desktop.WPFCommon;component/themes/generic.xaml" /> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
</Window.Resources> 

<Border 
    Background="{DynamicResource LightGradientBackgroundBrush}" 
    Margin="0" 
    > 

LightGradientBackgroundBrush在供應商組件中定義。通過包含上述ResourceDictionary,樣式在設計時出現,並且刷子在XAML編輯器中不加下劃線。

我可以找到其他樣式的定義嗎?我只知道這種風格,因爲它是在提供供應商提供的樣本中提到的。

編輯:

我知道一個BAML附加在反射器的,但除非它已被重新編譯/修補它不與反射器7的工作。有人已經完成了here though

雖然我希望有更好的解決方案。 Intellisense風格將會很棒。

回答

4

曾經有一個適用於viewing BAML resources的反射器加載項,可以很好地工作。但是自從雷德蓋特撞上派對之後,我一段時間都沒有使用過反光鏡。它可能不適用於當前版本。

+0

這裏有一個補丁版本的Reflector版本7的BAML插件:http://forums.reflector.net/questions/217/baml-add-in – 2011-06-15 03:21:17

0

你知道你的資源字典在哪裏,所以你應該能夠在代碼中加載它並枚舉可用資源。這至少會讓你瞭解什麼是可用的。

請參閱此鏈接:http://blogs.claritycon.com/leeroth/2009/05/20/load-xaml-resource-dictionaries-at-runtime/

枚舉鑰匙性能和使用項目屬性來訪問資源。你可以得到儘可能詳細的,但至少你應該能夠吐出資源名稱。

+0

我很喜歡這個答案,因爲它不涉及你需要購買的工具,以及你需要修補的插件。但是,我已經有了反射器,並且安裝了預先修補的插件將我排除了。不知道爲什麼你被低估了。考慮到這點有點苛刻,對於大多數還沒有反射器的人來說,這將是答案。 – 2011-06-15 12:10:05

相關問題