Настройка Конвертера Для Возврата Свойств Из Шаблона

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

Мои свойства элемента управления: {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 ответ

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

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

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

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

    Затем измените свой конвертер, чтобы вернуть цвет, который вы хотите, когда true и другой цвет, когда false;

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

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