2012-01-02 30 views
1

我正在使用WPF擴展工具包的屬性編輯器,我需要添加對使用此工具包附帶的顏色編輯器編輯System.Drawing.Color的支持。什麼是WPF添加對現有顏色編輯器的支持功能的方式?

當前顏色編輯器通過顏色選擇器組件完成其工作,並且似乎使用數據綁定將拾色器的SelectedColor屬性直接連接到編輯對象的顏色屬性。不幸的是,工具包的編輯是通過返回一個DependencyProperty來實現的,而不是被要求自己綁定它,所以it doesn't seem I can insert the (absolutely trivial) type conversion在那裏。

我只看到兩個這樣做的其他方式:

  • 複製整個拾色器,改變它編輯屬性的類型。由於顯而易見的原因,這是我想要做的最後一件事。
  • 從類型爲System.Drawing.Color的拾色器公開第二個Color屬性,以便我的新顏色編輯器可以告訴屬性網格綁定到該屬性。但是我被告知擁有兩個具有相同基礎值的依賴屬性是一個可怕的想法。

有沒有更好的方法?

如果我真的應該在Color Picker組件中暴露兩種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顏色。謝謝! – 2012-01-02 13:52:58

相關問題