في Silverlight، هل يمكن تحديد الحد الأدنى/الأقصى لقيم DependencyProperty؟

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

سؤال

على سبيل المثال، لدي خاصية تبعية تعمل على تغيير ScaleTransform للوحة Canvas، ولكن إذا انخفضت القيمة إلى ما دون الصفر، فإنها تؤدي إلى حدوث خطأ.بالتأكيد، يمكنني إجباره على الصفر في الكود إذا حدث ذلك، ولكنني أفضل استخدام طريقة أفضل مثل استخدام udouble (مزدوج غير موقّع)، وهو غير موجود في Silverlight أو حتى تعيين قيم الحد الأدنى/الحد الأقصى في مكان ما في DependencyProperty.

ما هو النهج الأفضل هنا؟

هل كانت مفيدة؟

المحلول

إذا كنت ستتعامل مع هذا الأمر في DependencyProperty الخاص بك، فإنني أوصي بالتعامل معه بطريقة خاصية تغيير رد الاتصال, ، والذي يتحقق من أن القيمة في النطاق الصحيح ويتجاوزها إذا لم تكن كذلك.

يمكنك أيضًا التعامل مع هذا خارج خاصية التبعية.على سبيل المثال:

نصائح أخرى

وفقط لإضافة إلى ذلك، داخل PropertyChangedCallback الخاص بك، وهو نمط نموذجي ستكون العودة يوم / قيم غير صحيحة خارج المدى، قبل إلقاء استثناء.

إذا كنت لا تفعل تعود، والواقع لا يزال يتم تعيين قيمة خارج المدى، وسوف دولتكم تكون غير صالحة.

وسترى الأمثلة على ذلك "coercian الرجل الفقير" في بعض أدوات سيلفرلايت. وهنا 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");
        }

ويمكنك أيضا تنفيذ بنفسك "للقراءة فقط" خصائص التبعية سيلفرلايت بطريقة مماثلة، على الرغم من أنه سوف تتطلب الحقل الخاص لبيان ما إذا كنت تقوم أو العودة القيمة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top