2012-08-02 81 views
5

我試圖爲我的業務實體中的不同狀態設置靜態資源。這個想法是,我可以使用一個值轉換器來獲取業務實體,並根據算法返回相應的背景畫筆。我希望資源是靜態的,所以我可以在設計器中設計它們並手動切換它們以預覽開發過程中的樣子,但能夠以編程方式使用它們。使用ValueConverter返回StaticResource

目的就是讓這些方針的東西:如果靜態資源在頁/控制/框架的層次結構元素聲明

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     var data = value as DummyData; 

     if (data == null) 
      return null; 

     //Find resources 
     if (data.VarianceAmount >= 0) 
      return StaticResources.HighBackground; 
     else 
      return StaticResources.LowBackground; 
    } 

,如何從價值轉換器內部訪問?我已經將我的值轉換器設置爲DependencyObject,但我不確定如何從那裏導航層次結構。

回答

10

訣竅是在創建時將所需的資源值傳遞給轉換器。

例如,

public class CustomColorConverter : IValueConverter 
    { 
    public SolidColorBrush HighBackground { get; set; } 
    public SolidColorBrush LowBackground { get; set; } 

    // remaining implementation... 
    } 

然後在XAML中的資源部分,你會聲明它是這樣的(當然使用自己的資源):

<local:CustomColorConverter x:Key="BackgroundConverter" 
    HighBackground="{StaticResource HighlightBrush}" 
    LowBackground="{StaticResource NormalBrush}" /> 

這樣做的好處可重複使用。您可以使用新鍵創建另一個實例並定義不同的畫筆。

此外,這可以適用於任何東西,而不僅僅是SolidColorBrushes;您也可以定義完整的樣式或模板。

希望有所幫助。

+1

+1更好的解決方案。已刪除我的答案 – 2012-08-02 14:16:05