[英]Seemingly strange WPF behaviour: textbox lostfocus event and button click event
.net 4.0代码在下面进一步列出时,出现了以下现象:
单击文本框使其获得焦点,然后单击按钮:
这些错误或行为是否是设计使然-以后是否有进一步的解释?
<Window x:Class="WpfApplication4.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="216,194,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
<TextBox Height="23" HorizontalAlignment="Left" Margin="197,108,0,0" Name="textBox1" VerticalAlignment="Top" Width="120" />
</Grid>
</Window>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
textBox1.LostFocus += new RoutedEventHandler(handlelostfocus);
}
private void handlelostfocus(object sender, RoutedEventArgs e)
{
MessageBox.Show("handlelostfocus");
}
private void button1_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("click");
}
}
在这种情况下,“单击”永远不会发生,因为如HB所示,您正在通过显示模式消息框来中断UI /事件逻辑,因此按钮上永远不会发生鼠标按下事件。
尝试用非模态窗口替换消息框,例如:new Window(){宽度= 300,高度= 100,标题=“ handlelostfocus”} .Show();
并且您将看到事件仍然发生,因为您没有将焦点从事件逻辑中间的主窗口移开。
将按钮的ClickMode属性更改为“按”
<Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="216,194,0,0" ClickMode="Press" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" MouseUp="button1_MouseUp" MouseLeftButtonUp="button1_MouseLeftButtonUp" />
<TextBox Height="23" HorizontalAlignment="Left" Margin="197,108,0,0" Name="textBox1" VerticalAlignment="Top" Width="120" />
您中断了点击逻辑,要同时获得一次单击,请同时在Button
上连续单击鼠标并向下移动。 因此,观察到的行为对我来说似乎还不错。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.