2017-07-04 3 views
0

Im folgende Beispiel meines Custom Control, warum kann ich nicht Transparent Eigenschaft in einem Setter eine SelectedColor Eigenschaft ändern? Eine Lösung mit Callback-Methode funktioniert gut, was ist der Unterschied zwischen ihnen im Falle einer anderen Eigenschaft ändern?WPF - Change Eigenschaft Wert in Setter einer anderen Eigenschaft


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); } 
    } 
} 

Antwort

1

Der Setter einer CLR-Wrapper für eine Abhängigkeitseigenschaft sollte nur Aufruf der SetValue Methode den tatsächlichen Wert der Abhängigkeitseigenschaft einzustellen.

Beliebige andere Logik sollte im Callback implementiert werden.

Beachten Sie auch, dass die CLR-Eigenschaft Wrapper zur Laufzeit umgangen werden, wenn Abhängigkeitseigenschaften in XAML-Einstellung (aber die Rückrufe sind nicht):

Why are .NET property wrappers bypassed at runtime when setting dependency properties in XAML?

Verwandte Themen