2015-04-16 29 views
1

簡介 我有一個WPF應用程序。 當我點擊/雙擊一個按鈕來顯示下一個屏幕,這是與MouseLeftButtonDown和MouseLeftButtonUp捕獲。 - 的MouseLeftButtonDown正在按鈕暗 - 的MouseLeftButtonUp是給我下一個畫面WPF - 在下一個屏幕上排隊的鼠標事件觸發器

問題: 如果我的「垃圾郵件」或有時只需點擊2-3(我們說,在這種情況下的3倍)倍按鈕,它開始加載下一個屏幕。當顯示下一個屏幕時,在隊列中留下兩個鼠標點擊,並且如果鼠標在第二個屏幕上的另一個新按鈕上,則點擊該按鈕。

我試着用一樣的東西:

void LayoutRoot_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
    { 
     Mouse.OverrideCursor = Cursors.Wait; 
     if (this.IsVisible && this.IsLoaded) 
      OnButtonPatient(); 
    } 

但兩者的屬性設置爲true。 我想這是正確的,因爲我可以看到鼠標事件觸發時的按鈕。 事件可以解釋這樣的:

  1. 3鼠標點擊
  2. 鼠標光標=等待光標
  3. 下一屏幕加載
  4. 鼠標光標=正常
  5. 鼠標光標=等待光標
  6. 點擊下一步按鈕

我該怎麼辦ndle這個? 我不想在先前的屏幕上發生的鼠標事件跟在我的下一個屏幕上。 問候!

+0

這種情況下的解決方案是簡單地改變用戶的行爲。使用按鈕上的「雙擊」時出現問題。這些按鈕應該被視爲「鏈接」或網頁按鈕,您只需點擊一次。 我們給選定的項目添加了一種顏色,表明他們要點擊的項目被選中,大多數人只會在該階段點擊一次。之前有人認爲他必須做雙擊來先選擇然後打開。 – HappySoftwareDeveloper

回答

0

我會建議在MouseUp事件觸發時檢查第一個窗口/屏幕上的IsMouseOver屬性。這可以讓你過濾掉新窗口阻塞第一個的事件。

void LayoutRoot_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
{ 
    Mouse.OverrideCursor = Cursors.Wait; 
    if (this.IsVisible && this.IsLoaded && this.IsMouseOver) 
     OnButtonPatient(); 
} 
+0

我試過這個,但不幸的是所有問題都出來了 – HappySoftwareDeveloper

1

我試過一個簡單的例子,使用StackPanel作爲控件。雖然我不確定爲什麼你不使用Button Click事件(爲什麼在ButtonUp上移動?)

private int count = 0; 
     private void StackPanel_OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
     { 
      if (count == 0 && (sender as StackPanel).IsMouseOver) 
      { 
       Mouse.OverrideCursor = Cursors.Wait; 
       count++; 
      } 

      e.Handled = true; 
     } 

     private void StackPanel_OnMouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
     { 
      if (count == 1 && (sender as StackPanel).IsMouseOver) 
      { 
       Mouse.OverrideCursor = Cursors.Arrow; 
       count++; 
      } 

      e.Handled = true; 
     } 
+0

這個類已經從類UserControl派生出來,dosnt有Click事件。我會嘗試將其更改爲Button,因爲這就是它,謝謝! – HappySoftwareDeveloper

+0

不知何故,鼠標事件被調用並觸發。 我們將嘗試改變用戶的行爲,因爲他們不應該雙擊「鏈接」,我們會將光標更改爲一隻手,並用鼠標懸停標記選定的選項。看看這是否能改變我們客戶的行爲。 – HappySoftwareDeveloper

相關問題