문제

예를 들어, 캔버스의 ScaleTransform을 변경하는 종속성 속성이 있지만 0 이하로 이동하면 오류가 발생합니다. 물론, 나는 그 일이 발생하면 코드에서 제로로 강제로 강제 할 수 있지만, 실버 라이트에 존재하지 않거나 최소/최대 값을 설정하는 Udouble (Unsigned Double)을 사용하는 것과 같은 더 나은 방법을 사용하고 싶습니다. 의존성 분비 자의 어딘가.

여기에서 가장 좋은 방법은 무엇입니까?

도움이 되었습니까?

해결책

의존성 전문가에서 이것을 처리하려면 PropertyChangedCallback, 값이 올바른 범위에 있는지 확인하고 그렇지 않은 경우 재정의합니다.

의존성 속성 외부에서도 처리 할 수도 있습니다. 예를 들어:

다른 팁

그것에 추가하기 위해, PropertyChangedCallback 내부에서는 예외를 던지기 전에 일반적인 패턴이 잘못/범위 외 값에서 되돌릴 것입니다.

반대를하지 않으면 범위 외 값이 실제로 설정되며 상태가 유효하지 않습니다.

Silverlight 툴킷 중 일부 에서이 "가난한 사람의 코르 시아"의 예를 볼 수 있습니다. 여기에 있습니다 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