2017-01-04 3 views
1

Я новичок в WPF (4.0), и я пытаюсь сделать простую форму с помощью некоторых TEXTBOX и КНОПКИ ОТПРАВКИ.wpf: проверить текстовое поле после нажатия кнопки

Когда пользователь нажимает кнопку отправки и программа проверяет, заполнены ли все текстовые поля, если нет, то незаполненное текстовое поле будет окружено «красной границей».

<StackPanel> 
    <Border Padding> 
     <StackPanel Orientation="Horizontal"> 
      <TextBox Name="name_textbox"/> 
     </StackPanel> 
    </Border> 


    <Border> 
     <StackPanel> 
      <Button HorizontalAlignment="Center" Margin="0">Submit</Button> 
     </StackPanel> 
    </Border>   
</StackPanel> 

Я прочитал, и я пытаюсь понять следующее, а также некоторые другие документы и стек сообщения переполнения, и я нашел, что есть много вещей и терминов, которые я не мог понять.

https://www.codeproject.com/Articles/15239/Validation-in-Windows-Presentation-Foundation#welcome

https://www.codeproject.com/Articles/140620/WPF-Tutorial-Dependency-Property

Мой вопрос: Я думаю, что есть что-то делать с привязкой данных проверки, и, кроме того, что еще я должен знать?

или есть какие-либо полезные ресурсы, рекомендующие или быстрые примеры?

Я потерялся и надеюсь, что кто-то может помочь, спасибо!

+0

Если вы используете 'ICommand', вы можете подтвердить свою кнопку, используя метод canexecute. Я рекомендую прочитать mvvm, который даст вам больше информации. – Eldho

ответ

0

Это часть класса, который я пишу для проверки валидации после того, как элемент потерял фокус.

добавить FocusAdvancement в ваше окно и установить ValidationOnLostFocus в true. и добавьте свою собственную проверку в текстовое поле ValidationRules.

public static class FocusAdvancement 
{ 
    public static readonly DependencyProperty ValidationOnLostFocusProperty= 
     DependencyProperty.RegisterAttached ("ValidationOnLostFocus",typeof (bool),typeof (FocusAdvancement),new UIPropertyMetadata (OnValidationOnLostFocusPropertyChanged)); 

    public static bool GetValidationOnLostFocusProperty(DependencyObject d) 
    { 
     return (bool)d.GetValue (ValidationOnLostFocusProperty); 
    } 

    public static void SetValidationOnLostFocusProperty(DependencyObject d,bool value) 
    { 
     d.SetValue (ValidationOnLostFocusProperty,value); 
    } 

    private static void OnValidationOnLostFocusPropertyChanged(DependencyObject d,DependencyPropertyChangedEventArgs e) 
    { 
     var element=(UIElement)d; 
     if (element==null) 
      return; 
     if ((bool)e.NewValue) 
     { 
      element.LostFocus+=LostFocus; 
     } 
     else 
      element.GotFocus-=LostFocus; 
    } 

    private static void LostFocus(object sender,RoutedEventArgs e) 
    { 
     var element=(UIElement)sender; 

     if (element!=null) 
     { 
      TextBox oTextBox=(TextBox)element; 
      oTextBox.GetBindingExpression (TextBox.TextProperty).UpdateSource(); 
     } 
    } 
Смежные вопросы