Как передать несколько параметров в массив params в WPF MarkupExtension? - PullRequest
5 голосов
/ 09 февраля 2009

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

Ответы [ 2 ]

2 голосов
/ 17 февраля 2009

Я думаю, что вы должны использовать массив x: Array, я не знаю другого пути (и даже не могу придумать никакого другого способа, который будет совместим с синтаксисом расширения разметки {}).

0 голосов
/ 02 марта 2010

Иногда это не красиво, но грубая сила несет день ...

Из источника:

[MarkupExtensionReturnType(typeof(PriorityBinding))]
public sealed class Priority:MarkupExtension {

readonly BindingBase[] bindings;

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

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...