2009-02-09 13 views
5

Devo creare un MarkupExtension per la mia applicazione WPF che dovrà essere in grado di prendere un numero arbitrario di parametri che verranno utilizzati per la sostituzione di token in stringhe internazionalizzate. Il nostro codice di internazionalizzazione utilizza una matrice params per prendere questi parametri. Dal momento che voglio che questi siano passabili da XAML, c'è un modo per specificare questi parametri senza creare esplicitamente una x: Array in XAML?Come posso passare più parametri a un array params in un MarkupExtension WPF?

risposta

2

Penso che devi usare x: Array, non conosco nessun altro modo (e non posso nemmeno pensare a nessun altro modo che sia compatibile con la sintassi dell'estensione di markup {}).

+0

lei ha ragione. Ho esaminato questo a lungo e ho avuto la stessa risposta. –

0

A volte non è abbastanza, ma la forza bruta porta il giorno ...

[MarkupExtensionReturnType(typeof(PriorityBinding))] 

pubblico classe chiusa Priorità: MarkupExtension {

sola lettura BindingBase [] legature;

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

}

Problemi correlati