Как передать несколько параметров в массив params в WPF MarkupExtension?



Мне нужно создать MarkupExtension для моего приложения WPF, которое будет иметь возможность принимать произвольное число параметров, которые будут использоваться для замены маркеров в интернационализированных строках. Наш код интернационализации использует массив params для получения этих параметров. Поскольку я хочу, чтобы они были передаваемыми из XAML, есть ли способ указать эти параметры без явного создания массива x:в XAML?

426   2  
wpf

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

    Ничего не найдено.