2010-10-28 71 views
1

我工作在一個WPF項目與許多用戶控件,我試圖把我的WPF資源的一些理智。在WPF中,我如何在ResourceDictionaries之間交叉引用資源?

基本文件包含所有視圖需要通用的東西,比如顏色:

<!-- Resources.xaml --> 
<Color x:Key="FlashOrange">#F59500</Color> 

那麼,具體到一個視圖中的資源文件需要引用FlashOrange:

<!-- ContactViewResources.xaml --> 
<DataTrigger Binding="{Binding IsActiveConversation}" Value="True"> 
    <Setter Property="Background" Value="{StaticResource FlashOrange}"/> 
</DataTrigger> 

最後我d喜歡在我的UserControl中「包含」。不幸的是,通過這種方法,我得到了一個關於{StaticResource FalshOrange}的例外情況沒有被定義。

<!-- ContactView.xaml --> 
<UserControl.Resources>   
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="..\Resources.xaml"/> 
      <ResourceDictionary Source="ContactViewResources.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary>  
</UserControl.Resources> 

所有的視圖文件是在同一個DLL組件和一個單獨的EXE組件運行

謝謝!

回答

1

要麼將​​Resources.xaml合併到ContactViewResources.xaml中,以便靜態引用在加載時在其資源樹中具有到FlashOrange的直接路徑,或者使用DynamicResource。

1

要在另一個ResourceDictionary中引用一個ResourceDictionary,請使用您想要保存該引用的ResourceDictionary的MergedDictionary屬性。在你的情況下:

<!-- ContactViewResources.xaml --> 
<ResourceDictionary ...> 
    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="..\Resources.xaml"/> 
    </ResourceDictionary.MergedDictionaries> 
    ... 
</ResourceDictionary>