質問

たとえば、CanvasのScaleTransformを変更する依存関係プロパティがありますが、ゼロ未満になるとエラーがスローされます。もちろん、それが発生した場合はコードで強制的にゼロにすることもできますが、Silverlightには存在しない、または最小/最大値を設定するudouble(unsigned double)を使用するなど、より良い方法を使用したいですDependencyPropertyのどこかに。

ここでの最善のアプローチは何ですか?

役に立ちましたか?

解決

DependencyPropertyでこれを処理する場合は、 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");
        }

独自の「読み取り専用」を実装することもできます同様の方法でSilverlight依存関係プロパティを設定しますが、値を設定するか元に戻すかを示すプライベートフィールドが必要になります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top