コンテンツが必要であるというルールを適用する TextBox の添付プロパティを作成する必要があります。
注:残念ながら、データ注釈または SL4 検証フレームワークを使用できません。
テキストボックスはビューのコンテキスト内に表示されます。ビューは多くの場所で再利用されます。ビュー内の TextBoxes 間をタブ移動/クリックすると、「必要な」TextBox が空のままになっている場合にポップアップ メッセージでユーザーに通知する必要があります。
これで、 LostFocusイベントを介してこれが機能します。
public static readonly DependencyProperty RequiredProperty =
DependencyProperty.RegisterAttached("Required", typeof(bool), typeof(TextBoxRequiredService),
new PropertyMetadata(OnRequiredChanged));
public static bool GetRequired(DependencyObject d)
{
return (bool)d.GetValue(RequiredProperty);
}
public static void SetRequired(DependencyObject d, bool value)
{
d.SetValue(RequiredProperty, value);
}
private static void OnRequiredChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
TextBox textBox = d as TextBox;
textBox.LostFocus += (s, args) => {
if (textBox.Text.Length == 0) {
MessageBox.Show("Required Field!");
textBox.Focus();
}
};
}
しかし、これはフォーカスが失われるたびに明らかにトリガーされており、ビューを閉じるなど、検証を実行したくない特定の状況があります。
では、定義可能なアクションの範囲内で Required Text Box サービスを機能させる方法について、何か良い提案 (または例) を持っている人はいますか? それとも、 LostFocusの代わりに使用できる賢い代替手段はありますか?
ありがとう、マーク