2016-07-08 30 views
0

Ich muss der Benutzersteuerung eine Logik mit DependencyProperty hinzufügen. Meine Logik soll Eigenschaften auf Kontrollen in meinem UserControl ändern.Logik zur Steuerung mit DependencyProperty hinzufügen

Ich möchte vermeiden, große "Abhängigkeitsbaum" zu bauen, weil ich viele Benutzersteuerelemente habe. Ich möchte nur Bindung in meinen Fenstern verwenden (nicht in verschachtelten Benutzersteuerelementen).

Dies ist meine Kontrolle:

public partial class BucketElevatorControl : UserControl 
{ 
    public BucketElevatorControl() 
    { 
     InitializeComponent(); 
    } 

    public bool On 
    { 
     get 
     { 
      return (bool)GetValue(OnProperty); 
     } 
     set 
     { 
      SetValue(OnProperty, value); 
     } 
    } 

    // Using a DependencyProperty as the backing store for IsOn. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty OnProperty = DependencyProperty.Register(
      "On", 
      typeof(bool), 
      typeof(BucketElevatorControl), 
      new PropertyMetadata(
       false, PropertyChangedCallback 
       )); 



    private static void PropertyChangedCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs) 
    { 
     // I want to do something with my UserControl child controls 
    } 
} 

Die Frage ist: Wie kann ich eine gewisse Logik in contol Code tun hinter und profitieren Sie von Daten nehmen verbindlich?

Meine Logik ist kompliziert (Zeichnen von Grafiken, Animationen usw.).

+1

Und Sie Frage ist ...? – mechanic

+1

unklare Frage! Schreibe deine Aufgaben nacheinander in einfacher Sprache – AnjumSKhan

Antwort

1

Sie sollten CoerceValueCallbacks für die Eigenschaften erstellen, die Sie ändern möchten. Diese Rückrufe legen die neuen Werte fest. Wenn diese Eigenschaft geändert wird, zwingen Sie dann die anderen, etwa so:

private static void PropertyChangedCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs) 

{ 
    dependencyObject.CoerceValue(MinReadingProperty); 
    dependencyObject.CoerceValue(MaxReadingProperty); 
} 
0

habe ich keine Ahnung, was du mit „Abhängigkeitsbaum“ bedeuten, aber wenn Sie wollen den Zustand der Dinge in der Vorlage ändern, ändert sich entsprechend In den Abhängigkeitseigenschaften Ihres Steuerelements können Sie dies mit TemplateBinding und/oder Triggern in Ihrer Steuerelementvorlage tun. Schreiben Sie value converters, wenn Sie müssen. Das meiste, was Sie tun müssen, kann wahrscheinlich so gemacht werden.

Wenn Sie kompliziertere Logik benötigen, können Sie auch OnApplyTemplate() in Ihrem Steuerelement überschreiben und GetTemplateChild() aufrufen, um benannte Steuerelemente in der Vorlage des Steuerelements zu erhalten. Zum Beispiel benötigen Sie möglicherweise die Vorlage, um eine TextBox irgendwo darin PART_FooText genannt zu haben; eine Ausnahme auslösen, wenn Sie null von GetTemplateChild("PART_FooText") as TextBox erhalten. Wenn die TextBox da ist, tun Sie alles, was Sie möchten: Behandeln Sie Ereignisse, legen Sie Eigenschaften, etc. Wenn Sie möchten, halten Sie ein privates Feld TextBox _PART_FooText;, um damit später in Ihrer Eigenschaft geändert Callbacks, andere Ereignisse oder was auch immer.