2012-08-02 26 views
5

İşletmecilerimde farklı durumlar için statik kaynakları kurmaya çalışıyorum. Buradaki fikir, işletme varlığını almak ve bir algoritmaya bağlı olarak karşılık gelen arka plan fırçasını döndürmek için bir değer dönüştürücüsü kullanabilmem. Kaynakların statik olmasını isterim, böylece onları tasarımcıya tasarlayabilir ve geliştirme sırasında neye benzeyeceğini önizlemek için manuel olarak değiştirebilirim, ancak bunları programatik olarak kullanabilirler.StaticResource döndürmek için ValueConverter kullanma

amacı bu satırlar boyunca bir şey var olacaktır: statik kaynaklar hierachy Sayfanın/kontrol/çerçeve elemanı beyan varsa

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; 
    } 

, nasıl değer dönüştürücü içinden erişmek do ? Değer dönüştürücümü bir DependencyObject değerine ayarladım, ancak hiyerarşiyi oradan nasıl yönlendireceğimi bilmiyorum.

cevap

10

Hile, oluşturduğunuz kaynak dönüştürücüye istenen kaynak değerlerini iletmektir. Örneğin

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

    // remaining implementation... 
    } 

Sonra Xaml kaynakları bölümünde, bunu böyle bir şey (elbette kendi kaynaklarını kullanarak) beyan ediyorum: Bu avantajı

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

yeniden kullanılabilir. Yeni bir anahtarla başka bir örnek oluşturabilir ve farklı fırçalar tanımlayabilirsiniz. Ayrıca, bu sadece SolidColorBrushes için değil, sadece her şey için çalışabilir; Tam Stiller veya Şablonları da tanımlayabilirsiniz.

Bu yardımcı olur umarım.

+1

+1 Çok daha iyi bir çözüm. Cevabımı sildim –