2012-01-02 1 views
1

은 내가 WPF 확장 툴킷의 속성 편집기 함께 일하고 있어요, 나는이 도구 키트와 함께 제공되는 색상 편집기를 사용하여 System.Drawing.Color 편집에 대한 지원을 추가해야합니다.이 기능에 대한 지원을 기존의 색상 편집기에 추가하는 WPF 방법은 무엇입니까?

현재 색상 편집기는 색상 선택기 구성 요소를 통해 작업을 수행하며 데이터 바인딩을 사용하여 색상 표의 SelectedColor 속성을 편집 된 객체의 색상 속성에 직접 연결합니다. 불행히도 Toolkit의 편집기는 DependencyProperty을 바인드하도록 반환하기 위해 구현되며, 바인드하도록 요청하는 대신 it doesn't seem I can insert the (absolutely trivial) type conversion이 바인딩됩니다.

  • 그것을 편집 속성의 유형을 변경, 전체 색상 선택기를 복제 :

    나는이 일을 두 개의 다른 방법을 참조하십시오. 이것은 명백한 이유 때문에 내가하고 싶은 마지막 일입니다.

  • 색상 선택기에서 System.Drawing.Color 유형의 두 번째 Color 속성을 노출하여 내 새 색상 편집기가 속성 표에 해당 속성을 바인딩하도록 알릴 수 있습니다. 그러나 동일한 기본 가치를 지닌 두 가지 종속성 속성을 갖는 것은 끔찍한 생각이라고 들었습니다.

더 좋은 방법이 있습니까?

색상 선택기 구성 요소에 실제로 두 가지 색상 속성을 표시해야한다면 "동기화"상태로 유지하는 올바른 방법은 무엇입니까?

답변

4

당신은 데이터 값 변환기를 사용하여 System.Drawing.Color에 바인딩 할 수 있습니다. 내 테스트 환경에서 작동합니다.

public class SystemDrawingColorConverter : IValueConverter 
{ 
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     System.Windows.Media.Color color = (System.Windows.Media.Color)value; 
     return System.Drawing.Color.FromArgb(color.A, color.R, color.G, color.B); 
    } 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     System.Drawing.Color color = (System.Drawing.Color)value; 
     return System.Windows.Media.Color.FromArgb(color.A, color.R, color.G, color.B); 
    } 
} 

XAML : 테스트 뷰 모델에 대한

<Grid> 
    <Grid.Resources> 
     <local:SystemDrawingColorConverter x:Key="converter" /> 
    </Grid.Resources> 
    <Grid.DataContext> 
     <local:VM /> 
    </Grid.DataContext> 
    <tk:ColorPicker SelectedColor="{Binding Color, Converter={StaticResource converter}}" /> 
</Grid> 

코드 :

public class VM 
{ 
    private System.Drawing.Color _color; 

    public System.Drawing.Color Color 
    { 
     get { return _color; } 
     set { _color = value; } 
    } 

} 
+1

딱! 이 Property Grid의 소스 코드를 살펴보면 TypeEditor 클래스가 실제로 IValueConverter를 지정할 수 있습니다. 그래서 내 눈금은 이제 GDI 색상을 완벽하게 지원합니다. 감사! –

관련 문제