Как передать несколько параметров в массив params в WPF MarkupExtension?
Мне нужно создать MarkupExtension для моего приложения WPF, которое будет иметь возможность принимать произвольное число параметров, которые будут использоваться для замены маркеров в интернационализированных строках. Наш код интернационализации использует массив params для получения этих параметров. Поскольку я хочу, чтобы они были передаваемыми из XAML, есть ли способ указать эти параметры без явного создания массива x:в XAML?
2 ответов:
Я думаю, что вы должны использовать массив x:, я не знаю другого способа (и даже не могу придумать другого способа, который будет совместим с синтаксисом расширения разметки {}).
Иногда это не очень красиво, но грубая сила несет день ...
[MarkupExtensionReturnType(typeof(PriorityBinding))]Публичный запечатанный класс приоритет: MarkupExtension {
Только для чтения bindingbase [] привязки;
#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; }}
Comments