Как настроить конвертер для возврата свойств из шаблона

Я делаю стиль для пользовательского элемента управления, который может быть одним из двух цветов.

Мои свойства моего элемента управления: { SolidColorBrush color1, SolidColorBrush color2, bool usingColor1}.

Я пытаюсь сделать конвертер, который будет привязан к usingColor1 и вернет либо color1, либо color2. Я хотел бы определить мой конвертер так:

<Style.Resources>
      <Converters:ValueParameterComparisonConverter x:Key="Color1WhenTrue" ValueWhenEqual="{DataTemplateKey Color1}" ValueWhenNotEqual="{DataTemplateKey Color2}"/>
</Style.Resources>

И используйте мой конвертер так:

<Border Background="{TemplateBinding UsingColor1, Converter={StaticResource Color1WhenTrue}}" />

Я реализовал это в моем коде, и он не работает. Я не понимаю, что делает DataTemplateKey, и не думаю, что это правильное слово для этого сценария.

Как настроить конвертер для возврата свойств из моего шаблона?

Редактировать:

Вот интересная часть кода конвертера:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
      bool isEqual;
      if (value == null)
      {
        isEqual = null == parameter;
      }
      else
      {
        isEqual = value.Equals(parameter);
      }

      return isEqual ? this.ValueWhenEqual : this.ValueWhenNotEqual;
}

1 ответ

Вы можете избавиться от параметров valueWhenEqual;

<Style.Resources>
      <Converters:ValueParameterComparisonConverter x:Key="Color1WhenTrue"/>
</Style.Resources>

Просто используйте привязку, а не привязку шаблона;

<Border Background="{Binding UsingColor1, Converter={StaticResource Color1WhenTrue}}" />

Затем измените конвертер, чтобы он возвращал нужный вам цвет, если он истинный, и другой цвет, если он ложный;

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
  var usingColor1 = (bool)value;

  return usingColor1 ? new SolidColorBrush(Color.FromRgb(179, 255, 179)) : new SolidColorBrush(Color.FromRgb(255, 100, 0));
}

Очевидно, вам нужно изменить цвета, используемые в приведенном мной примере.

Другие вопросы по тегам