2017-07-04 86 views
0

在我自定義控件的下面的例子,爲什麼我不能在二傳手一個SelectedColor財產改變TransparentColor財產?具有回調方法的解決方案可以正常工作,但在更改其他屬性的情況下它們有什麼區別?WPF - 更改屬性值在其他屬性二傳手


public class MyColorPicker : Control 
{ 
    static MyColorPicker() 
    { 
     DefaultStyleKeyProperty.OverrideMetadata(typeof(MyColorPicker), new FrameworkPropertyMetadata(typeof(MyColorPicker))); 
    } 

    public static readonly DependencyProperty SelectedColorProperty = 
      DependencyProperty.Register("SelectedColor", typeof(Color), typeof(MyColorPicker), new PropertyMetadata(Color.FromRgb(0, 201, 201), OnSelectedColorChange)); 

    private static void OnSelectedColorChange(DependencyObject sender, DependencyPropertyChangedEventArgs e) 
    { 
     var colorPicker = (MyColorPicker)sender; 
     var selectedColor = colorPicker.SelectedColor; 
     colorPicker.TransparentColor = Color.FromArgb(0, selectedColor.R, selectedColor.G, selectedColor.B); 
    } 

    public Color SelectedColor 
    { 
     get { return (Color)GetValue(SelectedColorProperty); } 
     set 
     { 
      // Why this not working? BorderStopColor = Color.FromArgb(0, value.R, value.G, value.B); 
      SetValue(SelectedColorProperty, value); 
     } 
    } 

    private static readonly DependencyPropertyKey TransparentColorPropertyKey = 
      DependencyProperty.RegisterReadOnly("TransparentColor", typeof(Color), typeof(MyColorPicker), new PropertyMetadata(Color.FromArgb(0, 0, 201, 201))); 

    public static readonly DependencyProperty TransparentColorProperty = TransparentColorPropertyKey.DependencyProperty; 

    public Color TransparentColor 
    { 
     get { return (Color)GetValue(TransparentColorProperty); } 
     protected set { SetValue(TransparentColorPropertyKey, value); } 
    } 
} 

回答