2010-07-11 21 views
6

Tengo un UserControl en mi aplicación WPF. Quiero llamar a un evento de clic y hacer algunas cosas cuando el usuario hizo clic en UserControl. El problema es que el UserControl no tiene un evento de clic. He buscado en la web y encontré que puede usar el evento MouseLeftButtonUp. Lo probé, pero no responde a mis clics. Alguna idea? Gracias!Haga clic en evento en UserControl- WPF

Respuesta

10

No escribió lo que está intentando hacer, pero si necesita un evento de clic, tal vez esté escribiendo algún tipo de botón (la clase Button es en realidad "algo en lo que puede hacer clic" con la representación visual en una plantilla de control que puede lugar)

  • Si necesita un botón con un contenido complejo en el interior - puso el control de usuario dentro de un botón
  • Si necesita un botón que no se ve como un botón de escribir una plantilla de control personalizado para el botón
  • Si necesita un botón con un botón de subclase de funcionalidad adicional, agregue los datos/comportamiento adicionales en el código y coloque la pantalla XAML en un estilo.
3

Creo que para sus necesidades PreviewMouseLeftButtonUp (Down) evento es más adecuado. Luego debe manejar ClickCount para contar la cantidad de clics y luego plantear su propio evento, en el cual otros controles sabrán, que se hace clic en su control. Hay muchos más métodos para manejar el evento click. Usted debe mirar this msdn article y this

UPDATE para manejar tanto Haga clic y 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;   
    }   
} 

Para probar este ejemplo, el nombre de su control como se _myCustomUserControl y añadir un TextBlock _textBlock llamado a su MainWindow.xaml

+0

yo no entendía muy bien lo que quería decir mediante el uso de ClickCount. ¿Puedes demostrarlo por código? Gracias – amitairos

+0

ClickCount es una de las propiedades de MouseButtonEventArgs. Cuando declaras el controlador de eventos, se puede acceder a través de e.ClickCount. Debe realizar un seguimiento de este valor para saber si solo fue UN clic o más. si (e.ClickCount == 1) // elevar su evento Click aquí si (e.ClickCount == 2) // elevar su evento de DoubleClick aquí Si el controlador es vista previa (significa que el aumento comienza exactamente en TU control hasta los padres) es posible que debas configurarlo en el controlador e.Herrado en verdadero. –

+0

Y lo siento, no tengo IDE instalado en esta máquina ahora para publicarle código claro sobre cómo manejarlo correctamente. :( –

0

¿Por qué no usar MouseDown?

dicho evento en el control de usuario y simplemente hacer esto:

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

Hacer clic es presionar y volver a abrir el botón, no solo presionar el botón. – ygoe

Cuestiones relacionadas