2

Ich habe eine Abhängigkeitseigenschaft (Foreground) für ein benutzerdefiniertes Steuerelement, das von Control erbt. Wenn ich das Steuerelement lade, möchte ich sehen, ob der Benutzer die Abhängigkeitseigenschaft festgelegt hat oder ob sie ihren Standardwert verwendet, bevor ich den Wert für sie festlege. Das Problem ist ein wenig komplizierter als das hier:Silverlight 2.0: Ermitteln, ob eine Abhängigkeitseigenschaft festgelegt ist, bevor sie geändert wird

Das Steuerelement befindet sich in einer benutzerdefinierten Steuerelementbibliothek, die ein Benutzer ihrem Projekt hinzufügt. Wenn sie ihr Projekt einrichten, habe ich die Möglichkeit, eine Zeile zu ihrer app.xaml-Datei mit einem bestimmten x: -Schlüssel hinzuzufügen, der die Einstellungen enthält, die ich beim Festlegen der Standardwerte für meine Steuerelemente gelesen habe. Wenn sie den Wert jedoch entweder in Code oder in Xaml festlegen, möchte ich den Wert nicht mit diesem globalen Wert festlegen. Hier sind ein paar Fälle visualisieren zu helfen, was ich spreche:

  1. Der Benutzer ein Steuerelement aus meiner Bibliothek erstellt und legt sie auf ihrer Seite. Sie setzen dann den Vordergrund auf grün. Ich möchte, dass der Wert des Vordergrunds für dieses Steuerelement grün ist.

  2. Der Benutzer fügt seiner app.xaml eine spezielle Zeile hinzu, die besagt, dass alle Steuerelemente einer bestimmten Art einen roten Vordergrund haben sollen. Ich möchte den Wert des Vordergrunds aller Steuerelemente dieser Art rot sein.

  3. Der Benutzer fügt seiner app.xaml eine spezielle Zeile hinzu, die besagt, dass alle Steuerelemente einer bestimmten Art einen roten Vordergrund haben sollen. Sie setzen dann den Wert des Vordergrunds eines einzelnen Steuerelements (in XAML) auf Gelb. Ich möchte, dass der Wert des Vordergrunds aller Steuerelemente dieser Art rot ist, mit Ausnahme der Farbe, für die sie sonst gelb sind.

Wenn die Steuerung laden, mag ich die Abhängigkeitseigenschaft lesen, um zu sehen, ob sie den Wert eingestellt haben, oder wenn es der Standardwert ist die im Stil definiert ist. Wenn es der Standardwert ist, möchte ich dann ihre spezielle Zeile aus der app.xaml-Datei lesen und den Vordergrund auf diese Farbe setzen.

Antwort

1

Ich habe ein bisschen mehr Forschung getan und glaube, dass ich eine Antwort gefunden habe. Wenn ich das Steuerelement (oder die Aktualisierung) lade, prüfe ich den Typ ReadLocalValue (ForegroundProperty), wenn dieser Typ System.Object ist, dann wird es nicht in XAML festgelegt. Wenn dieser Typ jedoch etwas anderes als System.Object (wie System.Windows.Media.Brush) ist, wird es in XAML festgelegt.

5

Erweitern Sie Ihre Lösung zu vervollständigen, aus MSDN page ReadLocalValue:

if (ReadLocalValue(FontSizeProperty) == DependencyProperty.UnsetValue) 
    // Do your thing... 

Das heißt, es DependencyProperty.UnsetValue gegen die besteht zu überprüfen, ob der Wert gesetzt ist oder nicht.