繁体   English   中英

看似奇怪的WPF行为:文本框丢失焦点事件和按钮单击事件

[英]Seemingly strange WPF behaviour: textbox lostfocus event and button click event

.net 4.0代码在下面进一步列出时,出现了以下现象:

单击文本框使其获得焦点,然后单击按钮:

  1. 如代码所示,将调用lostfocus处理程序,但不会调用buttonclick处理程序
  2. 注释掉MessageBox.Show(“ handlelostfocus”),然后单击处理程序
  3. 在handlelostfocus中设置断点并命中断点,但未调用click处理程序

这些错误或行为是否是设计使然-以后是否有进一步的解释?

<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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM