2012-04-20 16 views
0

以下行爲與.NET 4.0的代碼載列如下進一步發生:看似怪異的行爲WPF:文本框LostFocus事件和按鈕單擊事件

點擊文本框,所以它獲得焦點,然後單擊按鈕:

  1. 作爲代碼看臺,引發LostFocus處理程序被調用,而不是buttonclick處理
  2. 註釋掉MessageBox.Show(「handlelostfocus」),然後單擊處理程序被稱爲
  3. 在handlelostfocus和斷點設置斷點命中,但CLI ck處理程序不叫

這些錯誤或行爲的設計 - 如果以後,是否有任何進一步的解釋?

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

回答

2

在這種情況下,'點擊'從來不會發生,因爲正如H.B.表明您正在通過顯示模式消息框來中斷UI /事件邏輯,因此按鈕上永遠不會出現鼠標停止事件。嘗試用以下非模態窗口代替消息框: new Window(){Width = 300,Height = 100,Title =「handlelostfocus」} .Show();

並且您將看到事件仍然發生,因爲您沒有從事件邏輯中間的主窗口繪製焦點。巴頓

+0

感謝,但是如果你完全拿走這些URL代碼,僅僅只剩下空空的處理程序,並在這兩個處理器的大括號設置斷點,並且運行在OP中,輸入了lostfocus處理程序,但不是點擊處理程序?如果斷點只在點擊處理程序上設置,則它被輸入。我想知道這是爲什麼? – sturdytree 2012-04-20 11:47:06

+0

之所以這樣,是因爲調試器彈出並竊取了重點。 – Jon 2012-04-20 15:45:00

1

你打斷點擊邏輯,獲得一個點擊都鼠標按下和鼠標釋放需要在Button發生連續;因此觀察到的行爲對我來說似乎很好。

2

變化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" /> 
+0

謝謝,這幫助我解決了一個問題。非常感激。 – 2012-05-04 13:35:45