2012-11-19 29 views
5

我的ChildWindow有CloseButton和處理程序分配給Click事件。代碼(例如只):ChildWindow關閉按鈕事件處理程序執行多次,如果它快速點擊很多次

聲明關閉按鈕:

<Button x:Name="CloseButton" Click="OnCloseButtonClick" /> 

私人計數器(用於診斷的問題):

private uint _i; 

關閉事件處理程序:

OnCloseButtonClick(object sender, RoutedEventArgs e) 
{ 
    DialogResult = true; 
    System.Diagnostics.Debug(_i++); 
} 

後快點擊程序可以輸出「1」,「2」,「3」等等...... 正如我知道的setti ng DialogResult = true(或false),應該關閉ChildWindow,並且應該沒有任何方法可以第二次提高CloseButton的事件Click

任何人都可以幫助我找出問題的原因,並幫助解決它沒有布爾標誌(執行/!執行)?

+1

我把它添加第一行'((Button)sender).IsEnabled = false'不是一個解決方案嗎? –

+0

是的,它是。但它看起來像解決方法。我也想知道問題的原因。 –

+0

我認爲沒有問題。一個按鈕可以被多次點擊,當你不希望它被點擊時,它可以禁用按鈕 – Jehof

回答

2

從我的意見

問題是因爲接近激活關閉窗口動畫關閉,這意味着直到動畫完成,並關閉窗口按鈕事件可用的窗口複製,見During Silverlight ChildWindow closing animation user can click any button

快速和骯髒的解決方案是添加

((Button)sender).IsEnabled=false; 

到你的開始點擊處理函數。

+0

混合事件處理程序的邏輯與用戶界面的視覺狀態看起來很煩人:) 但據我瞭解,現在有辦法解決它的好方法。 –

相關問題