У меня есть необходимость создать прикрепленное свойство для TextBox, которое применяет правило о том, что контент требуется.
ПРИМЕЧАНИЕ: К сожалению, я не могу использовать аннотации данных или платформы проверки SL4.
Текстовые поля отображаются в контексте просмотра. Представление повторно используется во многих местах. При закладке / щелчке между текстовыми окнами в представлении я хочу, чтобы всплывающее сообщение уведомляло пользователей, если они оставили «Обязательный» текстовый блок пустым.
Теперь у меня это работает через 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();
}
};
}
Но это срабатывает, очевидно, на каждом потерянном фокусе, и есть определенные ситуации, например закрытие представления, из-за которых я не хочу, чтобы проверка выполнялась.
Итак, есть ли у кого-нибудь хорошие предложения (или примеры) о том, как получить услугу «Обязательное текстовое поле», работающую в рамках определенного действия? Или, может быть, какие-нибудь умные альтернативы LostFocus , которые я мог бы использовать?
Спасибо,
Mark