wpf:点击按钮后验证文本框

时间:2017-01-04 03:59:19

标签: c# wpf validation data-binding

我是WPF(4.0)的新手,我正在尝试用一些TEXTBOX和一个SUBMIT BUTTON制作一个简单的表单。

当用户点击提交按钮并且程序检查是否所有文本框都填满时,如果没有,则未填充的文本框将被"红色边框"包围。

<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

我的问题是: 我认为与数据绑定验证有关,除此之外我还需要知道什么?

或者是否有任何好的资源推荐或快速示例?

我迷路了,希望有人可以帮忙,谢谢!

1 个答案:

答案 0 :(得分: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 ();
        }
    }