【问题标题】:wpf: validate text box after button clickedwpf:单击按钮后验证文本框
【发布时间】:2017-01-04 03:59:19
【问题描述】:

我是 WPF(4.0) 的新手,我正在尝试使用一些 TEXTBOX 和一个提交按钮制作一个简单的表单。

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

<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

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

或者有什么好的资源推荐或快速示例?

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

【问题讨论】:

  • 如果您使用的是ICommand,您可以使用 canexecute 方法验证您的按钮。我建议阅读 mvvm,它会给你更多的洞察力。

标签: c# wpf validation data-binding


【解决方案1】:

这是我编写的一个类的一部分,用于在元素失去焦点后检查验证。

在您的窗口中添加 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 ();
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多