这是我的 xaml 结构
<StackPanel>
<m:TextBoxWithEllipsis IsEllipsisEnabled="True"
Name="A"
LostFocus="text_LostFocus"/>
<m:TextBoxWithEllipsis IsEllipsisEnabled="True"
Name="B"
LostFocus="text_LostFocus"/>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
=> 这个结构可以循环更多。如:
<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>
Run Code Online (Sandbox Code Playgroud)
在 .cs 文件中,我定义事件失去焦点如下
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();
}
Run Code Online (Sandbox Code Playgroud)
问题:如果有 >= 2 个文本框的值为空(“”)。
==> 程序总是显示消息框 => 如果我单击确定按钮,它会显示另一个。它永远发生。我无法关闭程序。
问题:如果我有 >= 2 个空文本框,并且我的操作与上述问题相同。如何更改功能text_LostFocus以解决问题???
默认:
这些文本框的值始终为空(默认)
必须使用 BeginInvoke => 因为我想当用户点击文本框时,用户必须输入至少一个字符。
如果我是你,我就不会使用 MessageBox。WPF 有一个非常好的“绑定验证框架”(看看这里有一个非常好的教程)。否则,我会在每个文本框附近创建一个“警告”标签:
<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>
Run Code Online (Sandbox Code Playgroud)
然后在代码隐藏中:
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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28479 次 |
| 最近记录: |