2010-07-11 7 views
6

J'ai un UserControl dans mon application WPF. Je souhaite appeler un événement click et effectuer certaines actions lorsque l'utilisateur clique sur UserControl. Le problème est le UserControl n'a pas un événement de clic. J'ai effectué une recherche sur le Web et j'ai trouvé que vous pouviez utiliser l'événement MouseLeftButtonUp. Je l'ai essayé, mais il ne répond pas à mes clics. Des idées? Merci!Evénement Click dans UserControl - WPF

Répondre

10

Vous n'avez pas écrit ce que vous essayez de faire, mais si vous avez besoin d'un événement click, vous écrivez peut-être une sorte de bouton (la classe Button est en fait "quelque chose que vous pouvez cliquer"). lieu)

  • Si vous avez besoin d'un bouton avec un contenu complexe à l'intérieur - mettre votre contrôle utilisateur dans un bouton
  • Si vous avez besoin d'un bouton qui ne ressemble pas à un bouton écrire un modèle de contrôle personnalisé pour le bouton
  • Si vous avez besoin d'un bouton avec un bouton de sous-classe de fonctionnalités supplémentaires, ajoutez les données/comportements supplémentaires dans le code et placez l'affichage XAML dans un style.
3

Je pense que pour vos besoins, l'événement PreviewMouseLeftButtonUp (Down) est plus approprié. Ensuite, vous devez gérer ClickCount pour compter le nombre de clics, puis augmenter votre propre événement, sur lequel les autres contrôles sauront, que votre contrôle est cliqué. Il existe beaucoup plus de méthodes pour gérer les événements click. Vous devriez regarder this msdn article et this

UPDATE pour gérer à la fois Cliquez et 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;   
    }   
} 

Pour tester cet exemple le nom de votre commande _myCustomUserControl et ajouter un TextBlock nommé _textBlock à votre MainWindow.xaml

+0

Je ne comprends pas vraiment ce que vous vouliez dire en utilisant ClickCount. Pouvez-vous le démontrer par code? Merci – amitairos

+0

ClickCount est l'une des propriétés de MouseButtonEventArgs. Lorsque vous déclarez un gestionnaire d'événements, vous pouvez y accéder via e.ClickCount. Vous devez suivre cette valeur pour savoir s'il s'agit d'un seul clic ou plus. si (e.ClickCount == 1) // augmenter votre événement Cliquez ici si (e.ClickCount == 2) // augmenter votre événement DoubleClick ici Si votre gestionnaire est aperçu (signifie que l'augmentation commence exactement sur votre contrôle jusqu'aux parents) vous pouvez être mis en handler e.Handled à vrai. –

+0

Et je suis désolé, je n'ai pas installé d'IDE sur cette machine maintenant pour vous envoyer du code clair comment le gérer correctement. :( –

0

Pourquoi ne pas simplement utiliser MouseDown?

Mettre l'événement dans le contrôle de l'utilisateur et simplement faire ceci:

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

Cliquez sur le bouton est bas et relancez le bouton, pas simplement le bouton vers le bas. – ygoe