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

基本的な使い方

このトピックでは、検証インジケータコントロールの基本的な使い方について解説します。

概要

WPF アプリケーションでは、バインディングの機能を使用してデータ検証を行うことができます。入力検証ではバインディングされる各プロパティの Setter でチェック処理を行い、例外をスローするように実装します。

検証インジケータコントロールは、指定されたコントロールにて発生した例外をキャッチし、エラーアイコンを点滅表示することでエラーが発生したことを通知します。エラーアイコン上のマウスを移動することで、エラーの内容をツールチップで表示します。

監視するコントロールを指定する

検証インジケータコントロールの ElementName プロパティに、検証対象となるコントロールの Name プロパティまたは x:Name Attribute 属性の値を設定することで、検証インジケータコントロールは指定されたコントロールを監視し、検証が行われた際にその結果を表示するようになります。

以下のサンプルコードは、DataErrorValidationRule を使用して検証を行い、検証インジケータコントロールによって TextBox コントロールを監視し、値が空の場合は入力エラーとしてエラーアイコンを表示します。

using System.ComponentModel;
using System.Windows;

// 以下の1行は、MainWindow のコンストラクタ内に記述してください。
this.DataContext = new SampleData();

public class SampleData : IDataErrorInfo
{
    public string Address { get; set; }

    public string Error
    {
        get { return null; }
    }

    public string this[string columnName]
    {
        get
        {
            if (columnName == "Address")
                if (string.IsNullOrEmpty(this.Address))
                    return "入力必須項目です";
            return null;
        }
    }
}

また、以下のサンプルコードは、DataAnnotations を使用して検証を行い、検証インジケータコントロールによって TextBox コントロールを監視し、値が空の場合は入力エラーとしてエラーアイコンを表示します。

メモ メモ

このサンプルコードを実行する際は、「デバッグ無しで開始」([Ctrl]+[F5])を選択してください。

// 参照設定にて System.ComponentModel.DataAnnotations.dll アセンブリへの参照を追加してください。
using System.ComponentModel.DataAnnotations;

// 以下の1行は、MainWindow のコンストラクタ内に記述してください。
this.DataContext = new SampleData();

public class SampleData
{
    private string _address;

    [Required(ErrorMessage = "入力必須項目です")]
    public string Address
    {
        get { return _address; }
        set
        {
            Validator.ValidateProperty(value, new ValidationContext(this, null, null) { MemberName = "Address" });
            _address = value;
        }
    }
}
点滅のスタイルと点滅速度

エラーアイコンを表示する際は、BlinkStyle プロパティの設定に基づいて点滅表示が行われます。BlinkStyle.AlwaysBlink のときは、常に点滅表示となります。BlinkStyle.BlinkOnValidate のときは、数回点滅した後点灯状態となります。BlinkStyle.NeverBlink のときは、点滅表示は行わず、常に点灯状態となります。

また、BlinkRate プロパティを使って点滅の速度をミリ秒単位で指定できます。BlinkRate プロパティに 0 を設定した場合は、BlinkStyle プロパティが BlinkStyle.NeverBlink に設定され、点滅表示は行われなくなります。

コード上からエラーアイコンの表示/非表示を制御する

MarkError メソッドは、既存のすべての検証エラーを削除し、指定されたエラー内容でエラーアイコンを表示します。また、ClearError メソッドは、既存のすべての検証エラーを削除します。これらのメソッドを使用することで、検証インジケータによるエラー通知のタイミングを任意に制御することができます。

以下のサンプルコードは、テキストボックスに文字が入力されるたびに検証を行い、その結果に基づいてエラーアイコンを表示あるいは非表示にします。

private void TextBox1_TextChanged(object sender, TextChangedEventArgs e)
{
    if (string.IsNullOrWhiteSpace(TextBox1.Text))
        GcValidationIndicator1.MarkError(new TextBlock() { Text = "入力必須項目です。", Foreground = new SolidColorBrush(Colors.Red) });
    else if (TextBox1.Text.Length > 10)
        GcValidationIndicator1.MarkError(new TextBlock() { Text = "10文字以内で入力してください。", Foreground = new SolidColorBrush(Colors.Green) });
    else
        GcValidationIndicator1.ClearError();
}
参照