首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文本框的wpf LostFocus事件

文本框的wpf LostFocus事件
EN

Stack Overflow用户
提问于 2015-01-07 13:10:11
回答 1查看 33K关注 0票数 2

这是我的xaml结构

代码语言:javascript
复制
<StackPanel>
  <m:TextBoxWithEllipsis IsEllipsisEnabled="True"
     Name="A"
     LostFocus="text_LostFocus"/>
  <m:TextBoxWithEllipsis IsEllipsisEnabled="True"
     Name="B"
     LostFocus="text_LostFocus"/>
</StackPanel>

=>这种结构可以循环更多。例如:

代码语言:javascript
复制
<StackPanel>
  <m:TextBoxWithEllipsis IsEllipsisEnabled="True"
     Name="A"
     LostFocus="text_LostFocus"/>
  <m:TextBoxWithEllipsis IsEllipsisEnabled="True"
     Name="B"
     LostFocus="text_LostFocus"/>
</StackPanel>
<StackPanel>
  <m:TextBoxWithEllipsis IsEllipsisEnabled="True"
     Name="A"
     LostFocus="text_LostFocus"/>
  <m:TextBoxWithEllipsis IsEllipsisEnabled="True"
     Name="B"
     LostFocus="text_LostFocus"/>
</StackPanel>

在.cs文件中,我将事件丢失焦点定义为下面

代码语言:javascript
复制
private void text_LostFocus(object sender, RoutedEventArgs e)
{
   TextBox textbox = ((TextBox)sender);
   if (textbox.Text.Trim().Length == 0)
   {
      System.Windows.Forms.DialogResult result1 = System.Windows.Forms.MessageBox.Show("Empty string!", "Warning",
                 System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Exclamation);
                textbox.Dispatcher.BeginInvoke((Action)(() => { textbox.Focus(); }));
       return;
    }
    textbox.ScrollToHome();
}

问题:如果有>= 2文本框具有值,则为空("")。

  1. 我单击第一个空文本框=>,我不输入任何字符。
  2. 然后单击第二个空文本框。

==>程序总是显示消息框=>,如果我单击OK按钮,它会显示另一个。它永远都会发生。我不能关闭程序。

problem :如果我有>= 2空文本框,并且与上面的问题相同,则为。如何更改函数text_LostFocus 以解决问题?

默认

  • 这些文本框的值始终为空(默认)。
  • 必须使用BeginInvoke =>,因为我希望当用户单击文本框时,用户必须至少输入一个字符。
EN

回答 1

Stack Overflow用户

发布于 2015-01-07 15:35:59

如果我是你,我不会用MessageBox。WPF有一个非常好的“绑定验证框架”(以看这儿作为一个非常好的教程)。否则,我将创建一个“警告”标签,位于关闭每个文本框:

代码语言:javascript
复制
<StackPanel>
  <m:TextBoxWithEllipsis IsEllipsisEnabled="True"
     Name="A"
     LostFocus="text_LostFocus"/>
  <TextBlock Name="AWarning" Foreground="Red" />
  <m:TextBoxWithEllipsis IsEllipsisEnabled="True"
     Name="B"
     LostFocus="text_LostFocus"/>
  <TextBlock Name="BWarning" Foreground="Red" />
</StackPanel>

然后在代码隐藏中:

代码语言:javascript
复制
private void text_LostFocus(object sender, RoutedEventArgs e)
{
    TextBox textBox = ((TextBox)sender);
    TextBlock textBlock = FindName(String.Concat(textBox.Name, "Warning")) as TextBlock;
    textBlock.Text = String.IsNullOrWhiteSpace(textBox.Text) ? "Empty string!" : String.Empty;
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27820278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档