In Silverlight kann man Min- / Max-Werte für eine DependencyProperty definieren?
-
05-07-2019 - |
Frage
Zum Beispiel habe ich eine Abhängigkeitseigenschaft, die die Scaletransform einer Leinwand ändert, aber wenn es jemals unter Null geht wirft es einen Fehler. Sicher, ich könnte es nur auf Null zwingen, im Code, wenn das jemals passiert, aber ich würde lieber eine bessere Methode, wie mit einem udouble (unsigned double) verwenden, die nicht in Silverlight nicht vorhanden ist oder sogar die Einstellung der Min- / Max-Werte irgendwo in der DependencyProperty.
Was ist der beste Ansatz hier?
Lösung
Wenn Sie vorhaben, dies in Ihrem DependencyProperty zu handhaben, würde ich empfehlen, es in einem Umgang mit Werteumwandler
Andere Tipps
Nur um hinzuzufügen, dass in Ihrem PropertyChangedCallback, ein typisches Muster auf unrichtige / Out-of-Range-Werten werden zurückgesetzt wird, bevor eine Ausnahme zu werfen.
Wenn Sie die Revert nicht tun, der out-of-Range-Wert wird tatsächlich noch festgelegt werden, und Ihr Zustand wird ungültig.
Sie werden Beispiele für diese „armen Mannes coercian“ in einigen der Silverlight-Toolkit sehen. Hier ist die AutoCompleteBox.cs Quelle .
Das Muster ist so etwas wie:
int newValue = (int)e.NewValue;
if (newValue < 0)
{
source._ignorePropertyChange = true;
d.SetValue(e.Property, e.OldValue);
throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, Properties.Resources.AutoComplete_OnMinimumPopulateDelayPropertyChanged_InvalidValue, newValue), "value");
}
Sie können auch realisieren einen eigenen „read-only“ Silverlight Abhängigkeitseigenschaften in ähnlicher Weise, obwohl es ein privates Feld benötigen werden, um anzuzeigen, ob Sie setzen oder den Wert zurückkehrt.