かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

ValidationSummaryコントロール

画面内のBindingでValidationExceptionあたりを投げると、いい感じに表示してくれるValidationSummaryコントロールというものがあります。
こいつに、自分で任意のメッセージとか仕込めないのか少し探ってみます。

ヘルプを見ると、どうやらErrorsプロパティにValidationSummaryItemクラスを追加すると、メッセージが表示されるらしいです。
ということで以下のコードを書いてみました。

MainPage.xaml

<UserControl xmlns:dataInput="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.Input"  x:Class="ValidationSummaryTest.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480">
    <StackPanel x:Name="LayoutRoot">
        <TextBox x:Name="input" />
        <Button Content="追加" Click="AddButton_Click" />
        <dataInput:ValidationSummary x:Name="summary"></dataInput:ValidationSummary>
    </StackPanel>
</UserControl>

TextBoxと、Buttonと、ValidationSummaryを置いただけのシンプルなつくりです。
TextBoxとValidationSummaryには、x:Name属性をつけているので、コードビハインドからinputとsummaryという名前で、アクセス出来るようにしています。

ここでは、簡単に、TextBoxに入力した内容を、ValidationSummaryに追加してみます。

MainPage.xaml.cs

using System.Windows;
using System.Windows.Controls;

namespace ValidationSummaryTest
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
        }

        private void AddButton_Click(object sender, RoutedEventArgs e)
        {
            // ValidationSummaryItemを作って追加する。
            // コンストラクタには、表示させたいメッセージをセットする。
            var item = new ValidationSummaryItem(input.Text);
            summary.Errors.Add(item);
        }
    }
}

これで実行してTextBoxに適当なメッセージを入れてボタンを押すと下のような結果になります。

うん、ばっちり。