2016-05-25 6 views
0

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

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

Я пытаюсь сделать конвертер, который будет привязываться к useColor1 и вернет либо 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 и не думаю, что это правильное слово для этого сценария.

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

Edit:

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

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; 
} 
+0

Не могли бы вы показать свой класс конвертера, пожалуйста? –

+0

Я отправил функцию convert() – hededo

+0

В ваш конвертер верните 'ValueWhenEqual' или' ValueWhenNotEqual', если это свойство, имеющее цвет. – XAMlMAX

ответ

0

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

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

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

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

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