2010-07-13 47 views
16

我在ResourceDictionary中定義了多種顏色。例如:從值轉換器訪問資源字典中的顏色

<ResourceDictionary ...> 
    <Color x:Key=Gray1>#FFF7F1F3</Color> 
    <Color x:Key=Gray2>#FFDDD8DA</Color> 
</ResourceDictionary>

因此,我可以在應用程序的任何地方重複使用它們。

現在我寫了一個值轉換器將項目內部狀態轉換爲相關顏色。

如何訪問值轉換器的代碼中定義的顏色?

我的第一個想法是通過字典作爲轉換器參數。但我不知道如何實現這一點。



問候

編輯

Application.Current.Resources是不是一種選擇。因爲我稍後將無法訪問它。

回答

25

有關使用轉換器參數的煩人之處在於,您必須在每次要使用綁定時添加該文本。

相反,您可以將ResourceDictionary作爲轉換器的屬性,並在實例化轉換器時進行設置。轉爐

代碼:

public class SomeConverter : IValueConverter 
{ 
    private ResourceDictionary _resourceDictionary; 
    public ResourceDictionary ResourceDictionary 
    { 
     get { return _resourceDictionary; } 
     set 
     { 
      _resourceDictionary = value; 
     } 
    } 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     //do your own thing using the _dict 
     //var person = value as Person 
     //if (person.Status == "Awesome") 
     // return _resourceDictionary["AwesomeBrush"] 
     //else 
     // return _resourceDictionary["NotAwesomeBrush"]; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

} 

實例化並使用轉換器:

<Window.Resources> 
    <local:SomeConverter x:Key="MyConverter" > 
     <local:SomeConverter.ResourceDictionary> 
      <ResourceDictionary Source="SomeRandomResourceDictionary.xaml" /> 
     </local:SomeConverter.ResourceDictionary> 
    </local:SomeConverter> 
</Window.Resources> 

... 

<StackPanel Background="{Binding CurrentPerson, Converter={StaticResource MyConverter}}" > 
</StackPanel> 
+0

尼斯之一。這節省了我的一天。謝謝。 – DHN 2010-07-13 15:57:03

+2

剛剛遇到這個 - 我也試圖實現這一點。此解決方案是否不在ResourceDictionary中創建每個項目的新實例?或者是WPF足夠聰明地認識到它已經被加載,並且只使用一組值? – Ross 2011-06-17 11:48:13

+0

Visual Studio 2015和2017在設計模式中引發錯誤: 無法投射類型爲'OnDemandResourceDictionary'的對象以鍵入'Microsoft.VisualStudio.DesignTools.Markup.DocumentModel.DocumentCompositeNode'。如何擊敗它? – yatskovsky 2017-04-03 11:47:35