2012-04-17 12 views
6

me encontré con una pregunta preguntar sobre la manera de evitar la adición de convertidores de valores personalizada a recursos de la aplicación de uno:WPF: ¿Cómo registro convertidores de valor implícitos adicionales?

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

Sin embargo, me gustaría ir un paso más allá y registrar los convertidores que se encuentran a continuación implícita, como en este ejemplo:

<SolidColorBrush Color="Blue" /> 

aquí, estoy suponiendo que otras implícitas "StringToSolidColorBrushConverter" es patear-in que hace que el trabajo de ejemplo.

Este ejemplo hace no trabajo:

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

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

Creo que es porque no hay implcit ColorToSolidColorBrushConverter que WPF solo puede recoger y utilizar. Sé cómo crear uno, pero ¿cómo lo "registraré" para que WPF lo use automágicamente sin especificar el convertidor en la expresión de enlace?

+1

Eso [característica se proporciona a través de 'TypeConverter's] (http://msdn.microsoft.com/en-us/library/aa970913.aspx), y no estoy tan seguro de poder inyectarlo en tiempo de ejecución de una manera sensata, ya que requiere atributos en clases o propiedades que no son de su propiedad. – user7116

Respuesta

4

Si nos fijamos en el código fuente se encuentra esta

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

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

La conversión se realiza por el ColorConverter.

Y también

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

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

Cuando la conversión se realiza mediante BrushConverter.

No hay conversión "implícita" que pueda registrar. Todo se hace aplicando los atributos TypeConverter con el tipo del convertidor de valor apropiado a las propiedades o clases relevantes.

En su ejemplo es necesario utilizar

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

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