2010-01-22 3 views
4

personnalisé Attached J'utilise un événement attaché personnalisé que j'ai créé et je suis en train d'ajouter un gestionnaire à cet événementgestionnaire pour l'événement

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void dataGridTasks_Drop(object sender, RoutedEventArgs e) 
    { 

    } 
} 

Voici le code XAML

<ListView util:DragDropHelper.Drop="dataGridTasks_Drop"> 

I cette erreur dans l'exécution à InitializeComponent

objet de type « System.String » ne peut pas être convertie en type 'System.Windows.RoutedEventHandler'.

Quelqu'un sait pourquoi je reçois cette erreur? Merci!

Voici mon code événement

public static readonly RoutedEvent DropEvent = EventManager.RegisterRoutedEvent(
     "Drop", RoutingStrategy.Bubble, typeof(DropEventArgs), typeof(DragDropHelper)); 

    public static void AddDropHandler(DependencyObject d, RoutedEventHandler handler) 
    { 
     UIElement uie = d as UIElement; 
     if (uie != null) 
     { 
      uie.AddHandler(DragDropHelper.DropEvent, handler); 
     } 
    } 

    public static void RemoveDropHandler(DependencyObject d, RoutedEventHandler handler) 
    { 
     UIElement uie = d as UIElement; 
     if (uie != null) 
     { 
      uie.RemoveHandler(DragDropHelper.DropEvent, handler); 
     } 
    } 

Code DropEventArgs

class DropEventArgs : RoutedEventArgs 
{ 
    public object Data { get; private set; } 
    public int Index { get; private set; } 

    public DropEventArgs(RoutedEvent routedEvent, object data, int index) 
     : base(routedEvent) 
    { 
     Data = data; 
     Index = index; 
    } 
} 
+0

avez-vous essayé d'attacher le gestionnaire d'événements dans le code au lieu du concepteur? –

+0

Je n'ai pas essayé, cela pourrait fonctionner dans le code derrière. Mais, pourquoi cela ne fonctionne pas dans le code xaml? spécialement que tous les exemples que j'ai trouvés en ligne fonctionnent comme ça. – Zied

+1

Pouvez-vous s'il vous plaît mentionner comment vous avez défini l'événement? – mg007

Répondre

6

Après quelques heures de vérification des échantillons et mon code, le problème est à cause de la définition de cas de l'événement en effet. (Merci Mihir et Dabblernl).

J'ai fait une erreur dans le 3ème argument de la méthode RegisterRoutedEvent en fournissant le type d'événement au lieu d'un type Handler.

Le code correct est le suivant:

public delegate void DropEventHandler(object sender, DropEventArgs e); 

    public static readonly RoutedEvent DropEvent = EventManager.RegisterRoutedEvent(
     "Drop", RoutingStrategy.Bubble, typeof(DropEventHandler), typeof(DragDropHelper)); 

Le message d'erreur est trompeur.

Questions connexes