2009-02-09 9 views
5

Je dois créer un MarkupExtension pour mon application WPF qui devra être capable de prendre un nombre arbitraire de paramètres qui seront utilisés pour le remplacement de jetons dans les chaînes internationalisées. Notre code d'internationalisation utilise un tableau params pour prendre ces paramètres. Puisque je veux que ceux-ci soient passables à partir de XAML, existe-t-il un moyen de spécifier ces paramètres sans créer explicitement un x: Array en XAML?Comment puis-je transmettre plusieurs paramètres à un tableau de paramètres dans une extension MarkFWext?

Répondre

2

Je pense que vous devez utiliser le x: Array, je ne connais pas d'autre moyen (et je ne peux même pas penser à un autre moyen qui serait compatible avec la syntaxe de l'extension de balisage {}).

+0

Vous avez raison. J'ai regardé cela pendant longtemps et j'ai trouvé la même réponse. –

0

Parfois, ce n'est pas jolie, mais la force brute porte le jour ...

[MarkupExtensionReturnType(typeof(PriorityBinding))] 

classe scellée publique prioritaire: MarkupExtension {

readonly BindingBase [] fixations;

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

}

Questions connexes