В Silverlight можно ли определить минимальные / максимальные значения для DependencyProperty?

StackOverflow https://stackoverflow.com/questions/1203042

Вопрос

Например, у меня есть свойство dependency, которое изменяет ScaleTransform холста, но если оно когда-либо опускается ниже нуля, это выдает ошибку.Конечно, я мог бы просто принудительно обнулить его в коде, если это когда-нибудь произойдет, но я бы предпочел использовать лучший метод, такой как использование udouble (unsigned double), которого не существует в Silverlight, или даже установка значений min / max где-нибудь в DependencyProperty.

Каков здесь наилучший подход?

Это было полезно?

Решение

Если вы собираетесь обрабатывать это в своем DependencyProperty, я бы рекомендовал обрабатывать это в Обратный вызов PropertyChanged, который проверяет, что значение находится в правильном диапазоне, и переопределяет его, если нет.

Вы также могли бы обработать это вне свойства dependency.Например:

Другие советы

Просто добавьте, что в свойстве PropertyChangedCallback типичный шаблон будет возвращаться к неправильным значениям / значениям, выходящим за пределы диапазона, прежде чем выдать исключение.

Если вы не выполните возврат, значение вне диапазона будет фактически установлено, и ваше состояние будет недействительным.

Вы увидите примеры этого "принуждения бедняка" в некоторых из Silverlight Toolkit. Вот источник AutoCompleteBox.cs .

>

Шаблон выглядит примерно так:

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

Вы также можете создать собственный " только для чтения " Свойства зависимостей Silverlight аналогичным образом, хотя потребуется личное поле, чтобы указать, устанавливаете ли вы значение или возвращаете его.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top