2010-07-11 129 views
6

我在我的WPF應用程序中有一個UserControl。 我想調用一個單擊事件,並在用戶單擊UserControl時執行一些操作。 問題是UserControl沒有單擊事件。 我在網上搜索,發現可以使用MouseLeftButtonUp事件。 我試過了 - 但它沒有響應我的點擊。 任何想法? 謝謝!UserControl中的Click事件 - WPF

回答

10

你沒有寫你正在做的事情,但是如果你需要點擊事件,也許你正在編寫某種按鈕(Button類實際上是「你可以點擊的東西」地方)

  • 如果您需要在複雜的內容的按鈕 - 把你的用戶控件按鈕
  • 裏面如果你需要一個按鈕,看起來並不像一個按鈕寫按鈕
  • 自定義控件模板
  • 如果您需要帶有附加功能子類按鈕的按鈕,請在代碼中添加額外的數據/行爲,並將顯示XAML置於樣式中。
3

我認爲你的需要PreviewMouseLeftButtonUp(Down)事件更適合。然後,您需要處理ClickCount來計算點擊量,然後提出您自己的事件,其他控件將知道您的控件已被點擊。處理點擊事件的方法有很多。你應該看看this msdn articlethis

UPDATE同時處理點擊和DoubleClick

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     _myCustomUserControl.MouseLeftButtonUp += new MouseButtonEventHandler(_myCustomUserControl_MouseLeftButtonUp); 
     _myCustomUserControl.MouseDoubleClick += new MouseButtonEventHandler(_myCustomUserControl_MouseDoubleClick); 
    } 

    bool _doubleClicked;   

    void _myCustomUserControl_MouseDoubleClick(object sender, MouseButtonEventArgs e) 
    { 
     _textBlock.Text = "Mouse left button clicked twice"; 
     _doubleClicked = true; 
     e.Handled = true;  
    } 

    void _myCustomUserControl_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
    { 
     if (_doubleClicked) 
     { 
      _doubleClicked = false; 
      return; 
     } 

     _textBlock.Text = "Mouse left button clicked once"; 
     e.Handled = true;   
    }   
} 

要測試此示例命名您的控制,_myCustomUserControl和命名_textBlock添加一個TextBlock你MainWindow.xaml

+0

我真的不明白你使用ClickCount的是什麼意思。你能否用代碼演示它?謝謝 – amitairos 2010-07-11 09:29:28

+0

ClickCount是MouseButtonEventArgs的te屬性之一。當你聲明事件處理程序時,可以通過e.ClickCount訪問它。您需要跟蹤此值,以瞭解它是否只是單擊一次或多次。 如果(e.ClickCount == 1) //提高你的Click事件在這裏 如果(e.ClickCount == 2) //這裏養 您的DoubleClick事件如果處理程序是預覽(意味着提高準確啓動在你的控制下直到父母)你可能應該設置在處理程序e.Handled爲true。 – 2010-07-11 09:41:30

+0

我很抱歉,我現在沒有在這臺機器上安裝IDE來發布清晰的代碼,如何處理它。 :( – 2010-07-11 09:51:17

0

爲什麼不直接使用MouseDown?

把事件的用戶控制和簡單的做到這些:

private void MyControl_MouseDown(object sender, MouseButtonEventArgs e) 
{ 
    if (e.ChangedButton == MouseButton.Left) 
    { 
     MessageBox.Show("Clicked!"); 
    } 
} 
+2

點擊按鈕並再次按鈕,而不僅僅是按鈕。 – ygoe 2014-01-03 22:27:51