0

使用下面进一步列出的 .net 4.0 代码会发生以下行为:

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

  1. 就代码而言,调用了 lostfocus 处理程序,但没有调用 buttonclick 处理程序
  2. 注释掉 MessageBox.Show("handlelostfocus") 然后单击处理程序被调用
  3. 在 handlelostfocus 中设置断点并命中断点,但未调用单击处理程序

这些错误或行为是设计的 - 如果稍后,是否有任何进一步的解释?

<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");
        }
    }
4

3 回答 3

3

将 Button 的 ClickMode 属性更改为“Press”

<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" />
于 2012-04-20T10:54:50.070 回答
2

在这种情况下,“点击”永远不会发生,因为 HB 表示您通过显示模式消息框来中断 UI/事件逻辑,因此按钮上永远不会出现鼠标按下事件。

尝试用非模态窗口替换消息框,例如: new Window() { Width = 300, Height = 100, Title = "handlelostfocus" }.Show();

您会看到事件仍然发生,因为您没有将焦点从事件逻辑中间的主窗口移开。

于 2012-04-20T10:30:26.103 回答
1

您中断点击逻辑,鼠标按下和鼠标向上都需要在;上连续发生点击。Button因此观察到的行为对我来说似乎很好。

于 2012-04-20T08:08:30.777 回答