2013-06-28 1 views
0

Мне нужно привязать свойство SelectedColor ColorPicker к пользовательскому цвету, которого нет в доступных цветах. Я создал простой тест, чтобы показать свою проблему. Мой XAML:Как я могу связать пользовательский цвет с набором инструментов WPF ColorPicker?

<xctk:ColorPicker SelectedColor="{Binding Path=Test}"></xctk:ColorPicker> 

код позади (CurrentStyle.PenColor возвращает целое значение, которое приравнивает 13109765):

public Color Test 
    { 
     get; 
     set; 
    } 

    public MyClass() 
    { 
    DataContext = this; 

    Test = Color.FromArgb((byte)((CurrentStyle.PenColor >> 24) & 0xFF), 
       (byte)((CurrentStyle.PenColor >> 16) & 0xFF), 
       (byte)((CurrentStyle.PenColor >> 8) & 0xFF), 
       (byte)(CurrentStyle.PenColor & 0xFF)); 
    InitializeComponent(); 

    } 

И вот как мой ColorPicker выглядит, когда окно загрузки:

enter image description here

Хотя, когда я перехожу к расширенным цветам, я вижу, что цвет был распознан и установлен правильно. Вот ПОС:

enter image description here

Надежда на вашу помощь. Большое спасибо!

EDIT

Я реализовал INotifyPropertyChanged, до сих пор безрезультатно. Вот код:

public Color Test 
    { 
     get 
     { 
      return test; 
     } 
     set 
     { 
      if (test != value) 
      { 
       test = value; 
       OnPropertyChanged("Test"); 
      } 
     } 
    } 


public event PropertyChangedEventHandler PropertyChanged; 
    protected void OnPropertyChanged(string prop) 
    { 
     if (this.PropertyChanged != null) 
      this.PropertyChanged(this, new PropertyChangedEventArgs(prop)); 
    } 

Возможно, я делаю здесь что-то неправильно.

ответ

1

Трудно сказать, является ли это вашей проблемой из опубликованного кода, но тип теста должен быть System.Windows.Media.Color, а не System.Background.Color.

РЕДАКТИРОВАТЬ

Значения вы счетные из PenColor (0, 200, 10, 5), который является прозрачным и, следовательно, показано правильно. Вы имели в виду (255, 200, 10, 5), который красный?

+0

Вы правы, это не указано в моем коде, но я фактически использую System.Windows.Media.Color. –

+0

, что действительно кажется проблемой, спасибо за идею! –

2

Вы должны реализовать INotifyPropertyChanged и поднять PropertyChanged событие с именем "Test"

MSDN есть пример

INotifyPropertyChanged

Это позволяет WPF, чтобы получить уведомление, когда ваше имущество изменяется

+0

Спасибо за ваш ответ! Я добавил реализацию INotifyPropertyChanged, но, похоже, это не помогает. См. Отредактированный вопрос. –