前回は、単純にValidationSummaryコントロールにValidationSummaryItemを追加しました。
今回は、もうちょっとValidationSummaryItemについて見てみようと思います。
下準備
下のような画面を作ります。
<UserControl xmlns:dataInput="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.Input" x:Class="SilverlightApplication4.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="textBox1" /> <Button Content="Add" Click="AddButton_Click" /> <dataInput:ValidationSummary x:Name="summary" /> </StackPanel> </UserControl>
コードビハインドは、AddButton_Clickイベントハンドラを追加している以外は、初期状態です。
ヘッダーの表示
前回はメッセージだけ表示していましたが、これにヘッダーをつけることができます。
ヘッダーといっても、メッセージの左側に、太字で文字が追加されるだけです。
このヘッダーをつけるためには、ValidationSummaryItemのMessageHeaderプロパティを設定します。
コードだと以下のようになります。
using System.Windows; using System.Windows.Controls; namespace SilverlightApplication4 { public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); } private void AddButton_Click(object sender, RoutedEventArgs e) { // テキストボックスに入力されたものをValidationSummaryに表示する var item = new ValidationSummaryItem(textBox1.Text); // そのメッセージのヘッダーにへっだーという文字列を表示させる item.MessageHeader = "へっだー"; // メッセージを追加 summary.Errors.Add(item); } } }
このプログラムを実行してボタンを押すと、以下のような結果になります。
ちゃんとヘッダーが表示されているのがわかります。
ValidationSummaryのメッセージをクリックしたときにコントロールへフォーカスをうつす
長いタイトルですが、タイトルの通りです。
これには、ValidationSummaryItemSourceクラスをValidationSummaryItemに追加することで実現できます。
private void AddButton_Click(object sender, RoutedEventArgs e) { // テキストボックスに入力されたものをValidationSummaryに表示する var item = new ValidationSummaryItem(textBox1.Text); // そのメッセージのヘッダーにへっだーという文字列を表示させる item.MessageHeader = "へっだー"; // 第一引数にプロパティ名と、第二引数にテキストボックスがエラーの // 原因だよみたいなことを指定してる。 item.Sources.Add(new ValidationSummaryItemSource( "Hoge", textBox1)); // メッセージを追加 summary.Errors.Add(item); }
実行結果の見た目は変わらないので省略しますが、ValidationSummaryに表示されたメッセージをクリックすると、テキストボックスにフォーカスが移動します。
因みに、ValidationSummaryItemSourceを複数追加すると、メッセージをクリックするたびにフォーカスが順番に移動していきます。
item.Sources.Add(new ValidationSummaryItemSource( "Hoge", textBox1)); item.Sources.Add(new ValidationSummaryItemSource( "Fuga", textBox2));
↑だと、最初にメッセージをクリックするとtextBox1へ、二回目のクリックでtextBox2へフォーカスが移動します。
ItemType
これ、設定しても何が変わるのかわかりません・・・。
ValidationSummaryItemType列挙体のObjectErrorとPropertyErrorが設定できます。
エラーメッセージがオブジェクトに関するものか、特定のプロパティに関するものかを設定できるみたいですが、見た目上の変化はわかりませんでした。
何かにこっそり使われているのだろうか。