2010-04-21 5 views
0

J'ai un problème avec un contrôle personnalisé que j'ai écrit sans déclencher l'événement ContextMenuOpening lorsque je le connecte par programmation. Le contrôle est essentiellement une enveloppe pour la zone de texte standard:WPF Custom TextBox ContextMenuOpening Problème

public class MyTextBox : TextBox 
{ 
    public MyTextBox() 
    { 
     this.ContextMenuOpening += new ContextMenuEventHandler(MyTextBox_ContextMenuOpening); 
    } 

    void MyTextBox_ContextMenuOpening(object sender, ContextMenuEventArgs e) 
    { 
     MessageBox.Show("ContextMenuOpening event fired"); 
    } 
} 

Il n'y a rien suspect soit sur le XAML:

<local:MyTextBox Height="25" Width="300"/> 

Pour une raison que je ne peux jamais l'événement au feu. J'essaie d'intercepter le menu contextuel pour pouvoir le modifier (c'est sensible au contexte) et j'essaie vraiment d'éviter d'avoir à connecter l'événement partout où le contrôle est utilisé - c'est sûrement possible?

Répondre

2

s'avère que vous devez définir l'explicity ContextMenu à null lors de la création de l'objet:

public MyTextBox() 
{ 
    this.ContextMenu = null; 
    this.Initialized += (s, e) => 
     ContextMenuOpening += new ContextMenuEventHandler(MyTextBox_ContextMenuOpening); 
} 

Ensuite, il fonctionne un régal :)