リサイズはクリックかドラッグ

入力日付の検証

このトピックでは、コントロールの検証機能を使用した入力日付の検証方法について解説します。

検証項目の指定

日付コントロールでは、ControlValidator クラスから派生した以下のクラスを使用して、入力された日付の検証を行うことができます。

ControlValidatorSet プロパティが示す ControlValidatorSet オブジェクトに対して、これらのいずれかもしくは両方のインスタンスを設定することにより、入力された日付に対する検証が行われます。

検証が行われるタイミング

コントロールの ValidationTrigger プロパティを使用して検証が行われるタイミングを指定できます。コントロールに値が入力され、フォーカスが移動してから検証を行うには、ValidationTrigger プロパティに ValidationTrigger.LostFocus を設定します。フォーカス移動前ですべてのフィールドへ値が入力された時点で検証を行うには、ValidationTrigger.PropertyChanged を設定します。既定値は ValidationTrigger.LostFocus です。

InputTextValidator による検証

InputTextValidator クラスは、入力された日付が妥当かどうかを検証する際に使用します。例えば、年月日を入力する日付コントロールにおいて、年、月フィールドのみを入力して日フィールドが未入力の場合、それは日付として不正確であるといえます。InputTextValidator では、このように日付が不正確な状態であれば検証エラーとみなし、指定されたエラーメッセージを通知します。

RangeValidator による検証

RangeValidator クラスは、入力された日付が、MaxDate プロパティおよび MinDate プロパティによって指定された日付範囲内かどうかを検証します。このとき、ValueProcessAction プロパティを使用して、日付範囲を超えた場合の値の制御を以下のいずれかから指定できます。

プロパティの値説明
ValueProcessAction.Keep何もしません。
ValueProcessAction.Clear入力日付をクリアします。
ValueProcessAction.Restore入力前の日付を復元します。
ValueProcessAction.AdjustToMinMax有効範囲内に収まるよう入力日付を調整します。

入力中の値制御

フォーカス移動前に範囲外の入力値を ValueProcessAction プロパティの設定に従って値を自動調整するには、次のような設定が必要です。

サンプル

以下のサンプルコードは、2010/10/13~2010/11/15 の日付範囲を設定し、コントロールがフォーカスを失ったタイミングで入力日付の検証を行う XAML コードです。入力日付が日付範囲を超えたときは、入力日付を保持します。

XAML
<StackPanel Width="150">
    <im:GcDateTime ValidationTrigger="LostFocus" MaxDate="2010/11/15" MinDate="2010/10/13">
        <im:GcDateTime.ControlValidatorSet>
            <im:ControlValidatorSet>
                <im:RangeValidator ErrorContent="日付値は 2010/10/13~2010/11/15 の間でなければなりません。" ValueProcessAction="Keep"/>
                <im:InputTextValidator ErrorContent="入力されたテキストは有効な日付書式ではありません。"/>
            </im:ControlValidatorSet>
        </im:GcDateTime.ControlValidatorSet>
    </im:GcDateTime>
    <Button Content="Click Me!" />
</StackPanel>
参照