2015-06-19 10 views
2

Я написал конвертер, который получитPass значения StaticResource к ConverterParameter в зерноуборочной строке

  • Value в Bool
  • Parameter в String

Я использую это так:

BorderBrush="{Binding IsSelected, 
         Converter={StaticResource BoolToColorBrushConverter}, 
         ConverterParameter='#ff00bfff;#0000bfff'}" 

Если Value - True, тогда преобразователь возвращает ColorBrush с первого цвета шестнадцатеричного кода в параметре else, возвращая ColorBrush из второго шестнадцатеричного кода цвета.

Мой конвертер работает очень хорошо Но я хочу знать, как я могу использовать его как это:

<Color x:Key="MyColor1">#66bb66</Color> 

-------------------- 

BorderBrush="{Binding IsSelected, 
         Converter={StaticResource BoolToColorBrushConverter}, 
         ConverterParameter=#ff00bfff;{StaticResource MyColor1}}" 

Результат в режиме конструктора:

enter image description here

Результат на RunTime :

enter image description here

Но я нужен цвет Hex код StaticResource в моем параметре, как это:

Parameter: "#ff00bfff;#66bb66" 

Мой вопрос, как я могу передать значение StaticResource в зерноуборочной строке в мои ConverterParameter ???

Каково ваше решение?

+0

Сделать всю строку параметров ресурсом * или * добавить свойство в ваш конвертер и создать несколько объектов конвертера с различными значениями свойств * или * использовать MultiBinding с IMultiValueConverter. – Clemens

+0

Вы не можете этого сделать. Вместо этого добавьте свойство с цветом, который вы можете использовать для привязки и с которого вы можете вызвать конвертер. – helb

+0

Это выглядит как идеальная задача для «MultiValueConverter». – almulo

ответ

1

Я знаю, что это немного поздно, но, надеюсь, это может помочь просрочку посетителей:

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

public class BoolToBorderBrushConverter : IValueConverter 
{ 
    public SolidColorBrush TrueColor { get; set; } 

    public SolidColorBrush FalseColor { get; set; } 

    // this example compares a binding property (string) with 1 parameter (also in string) 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (value != null && parameter != null) 
     { 
      if (String.Compare(value.ToString(), parameter.ToString(), true) == 0) 
      { 
       return this.TrueColor; 
      } 
      else 
      { 
       return this.FalseColor; 
      } 
     } 
     return this.FalseColor; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

, то вы можете настроить конвертер в XAML как это (в ResourceDictionary секция):

<ResourceDictionary> 
    <local:BoolToBorderBrushConverter x:Key="BrushConverter" TrueColor="{StaticResource MyTrueColor}" FalseColor="Transparent"> 
</ResourceDictionary> 

и это, как вы использовать преобразователь:

<Border BorderBrush="{Binding MyProperty, Converter={StaticResource BrushConverter}, ConverterParameter=ABC}"/>