2009-02-09 14 views
5

Necesito crear una MarkupExtension para mi aplicación WPF que tendrá que poder tomar un número arbitrario de parámetros que se utilizarán para el reemplazo de tokens en cadenas internacionalizadas. Nuestro código de internacionalización usa una matriz de parámetros para tomar estos parámetros. Como quiero que estos sean transitables desde XAML, ¿hay alguna manera de especificar estos parámetros sin crear explícitamente una x: Matriz en XAML?¿Cómo puedo pasar múltiples parámetros a una matriz params en WPF MarkupExtension?

Respuesta

2

Creo que tienes que usar la matriz x: no conozco otra manera (y ni siquiera puedo pensar en otra forma que sea compatible con la extensión de la extensión de marcado {}).

+0

estás en lo correcto. Investigué esto por mucho tiempo y obtuve la misma respuesta. –

0

A veces no es bastante, pero la fuerza bruta lleva el día ...

[MarkupExtensionReturnType(typeof(PriorityBinding))] 

pública Prioridad clase sellada: MarkupExtension {

de sólo lectura BindingBase [] fijaciones;

#region Constructors 
public Priority(BindingBase b1) { 
    bindings = new [] {b1}; 
} 

public Priority(BindingBase b1, BindingBase b2) { 
    bindings = new [] {b1, b2}; 
} 

public Priority(BindingBase b1, BindingBase b2, BindingBase b3) { 
    bindings = new [] {b1, b2, b3}; 
} 

public Priority(BindingBase b1, BindingBase b2, BindingBase b3, 
       BindingBase b4) { 
    bindings = new [] {b1, b2, b3, b4}; 
} 

public Priority(BindingBase b1, BindingBase b2, BindingBase b3, 
       BindingBase b4, BindingBase b5) { 
    bindings = new [] {b1, b2, b3, b4, b5}; 
} 

public Priority(BindingBase b1, BindingBase b2, BindingBase b3, 
       BindingBase b4, BindingBase b5, BindingBase b6) { 
    bindings = new [] {b1, b2, b3, b4, b5, b6}; 
} 

public Priority(BindingBase b1, BindingBase b2, BindingBase b3, 
       BindingBase b4, BindingBase b5, BindingBase b6, BindingBase b7) { 
    bindings = new [] {b1, b2, b3, b4, b5, b6, b7}; 
} 

public Priority(BindingBase b1, BindingBase b2, BindingBase b3, 
       BindingBase b4, BindingBase b5, BindingBase b6, BindingBase b7, BindingBase b8) { 
    bindings = new [] {b1, b2, b3, b4, b5, b6, b7, b8}; 
} 

#endregion 

public override object ProvideValue(IServiceProvider serviceProvider) { 
    var binding = new PriorityBinding(); 
    foreach (var item in bindings) { 
    binding.Bindings.Add(item); 
    } 
    return binding; 
} 

}

Cuestiones relacionadas