2012-04-17 5 views
6

fand ich eine Frage über die Möglichkeiten zu fragen Konvertern benutzerdefinierten Wert auf eine Anwendung Ressourcen zu vermeiden und fügt hinzu:WPF: Wie registriere ich zusätzliche implizite Wertkonverter?

Using Value Converters in WPF without having to define them as resources first

Allerdings würde ich gerne einen Schritt darüber hinauszugehen und zu registrieren, Konverter, die dann implizit sind, wie in dieses Beispiel:

<SolidColorBrush Color="Blue" /> 

Hier gehe ich davon aus, dass einige implizite „StringToSolidColorBrushConverter“ kicking-in, dass das Beispiel der Arbeit macht.

Dieses Beispiel macht nicht Arbeit:

<Window.Resources> 
    <Color x:Key="ForegroundFontColor">Blue</Color> 
</Window.Resources> 

<TextBlock Foreground={StaticResource ForegroundFontColor}>Hello</TextBlock> 

Ich glaube, das ist, weil es keine implcit ist ColorToSolidColorBrushConverter die WPF kann nur abholen und zu verwenden. Ich weiß, wie man einen erstellt, aber wie würde ich ihn "registrieren", so dass WPF ihn automatisch verwendet, ohne den Konverter im verbindlichen Ausdruck überhaupt anzugeben?

+1

Das [Feature über 'TypeConverter's vorgesehen ist] verwenden (http://msdn.microsoft.com/en-us/library/aa970913.aspx), und ich bin mir nicht ganz sicher, ob Sie es zur Laufzeit vernünftig injizieren können, da es Attribute für Klassen oder Eigenschaften benötigt, die Ihnen nicht gehören. – user7116

Antwort

4

Wenn Sie sich den Quellcode schauen werden Sie diese finden

public sealed class SolidColorBrush : Brush 
{ 
    public Color Color 
    { ... } 
    ... 
} 

[TypeConverter(typeof (ColorConverter))] 
public struct Color : IFormattable, IEquatable<Color> 
{ 
    ... 
} 

Die Umwandlung von der ColorConverter erfolgt.

Und auch

[TypeConverter(typeof (BrushConverter))] 
public abstract class Brush : Animatable, IFormattable, DUCE.IResource 
{ ... } 

public class TextBlock : ... 
{ 
    public Brush Foreground 
    { ... } 
} 

Wo die Umwandlung von BrushConverter erfolgt.

Es gibt keine "implizite" Konvertierung, die Sie registrieren können. Dies geschieht durch die Anwendung von TypeConverter-Attributen mit dem Typ des entsprechenden Wertkonverters auf relevante Eigenschaften oder Klassen.

In Ihrem Beispiel benötigen Sie

<Window.Resources> 
    <SolidColorBrush x:Key="ForegroundFontColor" Color="Blue"/> 
</Window.Resources> 

<TextBlock Foreground={StaticResource ForegroundFontColor}>Hello</TextBlock> 
Verwandte Themen