2012-08-02 6 views
5

Ich versuche statische Ressourcen für verschiedene Zustände in meinen Geschäftseinheiten einzurichten. Die Idee ist, dass ich einen Wertkonverter verwenden kann, um die Geschäftsentität zu übernehmen und den entsprechenden Hintergrundpinsel abhängig von einem Algorithmus zurückzugeben. Ich möchte, dass die Ressourcen statisch sind, damit ich sie im Designer entwerfen und sie manuell umschalten kann, um eine Vorschau zu erhalten, wie es während der Entwicklung aussehen würde, aber in der Lage sein, sie programmatisch zu verwenden.Verwenden von ValueConverter zum Zurückgeben von StaticResource

Ziel etwas in dieser Richtung zu haben wäre:

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

Wenn die statischen Ressourcen werden in der Seite/Steuerung/Rahmenelement in der Hierachie erklärt, wie greife ich es aus dem Inneren des Werteumwandler ? Ich habe meinen Wertkonverter auf ein DependencyObject gesetzt, aber ich bin mir nicht sicher, wie ich von dort aus die Hierarchie steuern soll.

Antwort

10

Der Trick ist, die gewünschten Ressourcenwerte in den Konverter zu übergeben, wenn Sie es erstellen.

Zum Beispiel

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

    // remaining implementation... 
    } 

dann in XAML-Ressourcen Abschnitt, dann würden Sie es so etwas wie diese (mit eigenen Ressourcen natürlich) erklärt:

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

Dies hat den Vorteil von wiederverwendbar sein. Sie können eine andere Instanz mit einem neuen Schlüssel erstellen und verschiedene Pinsel definieren.

Darüber hinaus kann dies für fast alles, nicht nur SolidColorBrushes funktionieren; Sie können auch komplette Stile oder Vorlagen definieren.

Hoffe, dass hilft.

+1

+1 Viel bessere Lösung. Habe meine Antwort gelöscht –