2010-07-11 60 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