0

xamlにテキストボックスがあります。ここに.csファイルのコードがあります。

public static readonly DependencyProperty dp =
            DependencyProperty.Register(
                "result", typeof( uint ), typeof( ui ),
                new FrameworkPropertyMetadata( ( uint )100, new PropertyChangedCallback( ResultChanged ) ) );


private static void ResultChanged(
            DependencyObject d, DependencyPropertyChangedEventArgs e )
        {
            var input = ( ui )d;
            var value = ( uint )e.NewValue;
        }

上記のコードはうまく機能し、テキストボックスにアルファベットや無効な文字を入力することはできません。しかし、ユーザーがテキストボックスに「0」を入力できないように、上記のコードを変更するにはどうすればよいですか?したがって、基本的に0を除くすべてのuintを許可します。

4

1 に答える 1

0

これを行うには多くの方法があります....最も簡単で簡単なのは、拡張WPFツールキットのNumericUpDownコントロールを使用することです....最小/最大範囲を設定すると、並べ替えられます。

http://wpftoolkit.codeplex.com/wikipage?title=NumericUpDown


ロジックをすべて自分で実行したい場合は、...

ニーズ/要件に応じて、依存関係プロパティのレジスタで「強制コールバック」および/または「検証コールバック」を指定できます。つまり、値を範囲に固定する必要がありますか、それともユーザーにエラーインジケータを表示する必要がありますか?

「強制」とは、値を別の値に調整する場所です。たとえば、この場合、0から1(または場合によってはnull)の任意の値を調整することができます。

「検証」では、値がチェックされ、値が正しいかどうかを判断します(falseのtrueを返すことにより)... falseを返すと、例外が発生します。

ErrorTemplateの表示方法でその「エラー」がユーザーインターフェイスに伝播されるようにするには、DependencyPropertyへのバインドでValidatesOnExceptionを使用します(デフォルトでは、コントロールの周囲に赤い境界線が表示されます)。

この場合、強制コールバックを使用する方法を示します...TextBox内で無効な値を待機させたくないと想定しているためです。検証が必要な場合は、上記のリンクを参照してください。(Changedコールバックは必要ないため、nullに設定されます)。

public static readonly DependencyProperty dp =
    DependencyProperty.Register(
        "result", typeof( uint ), typeof( ui ),
        new FrameworkPropertyMetadata(
            ( uint )100, 
            null,
            new CoerceValueCallback( ResultCoerceValue )
        )
    );


private static object ResultCoerceValue 
    (DependencyObject depObj, object baseValue)
{
    uint coercedValue = (uint)baseValue;

    if ((uint)baseValue == 0)
        coercedValue = 1; // might be able to set to null...but not sure on that.

    return coercedValue;
}

ValidationRules、場合によってはMaskedTextBox、PreviewTextInputの使用など、さまざまな手法を使用することもできます。

于 2012-08-07T20:20:21.733 に答える