c#
  • wpf
  • 2010-11-08 5 views 2 likes 
    2

    J'ai une forme WPF, lors de l'exécution en cas de charge ajouter les commandes suivantes de la chaîne XAMLWPF pourquoi methodInfo = object.GetType(). GetMethod ("SelectionChanged") ..... renvoie une valeur null?

    // load Canvas 
    sXAML = "<Canvas xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'";    
    sXAML += " Height=\"Auto\" Name=\"canvasMain\" Width=\"Auto\">"; 
    sXAML += " </Canvas>"; 
    
    XmlDocument xdoc = new XmlDocument(); 
    xdoc.LoadXml(sXAML); 
    XmlTextReader xmlReader = new XmlTextReader(new StringReader(xdoc.OuterXml)); 
    object obj = XamlReader.Load(xmlReader); 
    
    if (obj != null) 
    { 
    Canvas cnv = obj as Canvas; 
    this.AddChild(cnv); 
         this.RegisterName(cnv.Name, cnv); 
    } 
    

    puis ajoutez une toile un contrôle DataGrid

    // load dataGrid    
    sXAML = "<DataGrid xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'"; 
    sXAML += " AutoGenerateColumns=\"True\" Height=\"207\" HorizontalAlignment=\"Left\" Margin=\"140,6,0,0\" Name=\"dtgListServer\" VerticalAlignment=\"Top\" Width=\"751\" AlternatingRowBackground=\"LightCyan\">"; 
    sXAML += "</DataGrid>"; 
    
    XmlDocument xdoc = new XmlDocument(); 
    xdoc.LoadXml(sXAML); 
    XmlTextReader xmlReader = new XmlTextReader(new StringReader(xdoc.OuterXml)); 
    object obj = XamlReader.Load(xmlReader); 
    
    if (obj != null) 
    { 
    DataGrid dtg = obj as DataGrid; 
         cnv.Children.Add(dtg); 
         cnv.RegisterName(dtg.Name, dtg); 
    } 
    

    Je dois maintenant ajouter des événements à DataGrid le contrôle, mais la méthode GetMethod retourne toujours null

    EventInfo ei = dtg.GetType().GetEvent(eventname); 
    MethodInfo mi = dtg.GetType().GetMethod(methodname, BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic); 
    Delegate del = Delegate.CreateDelegate(ei.EventHandlerType, this, mi); 
    ei.AddEventHandler(dtg, del); 
    

    bien sûr, j'ai essayé avec la méthode « SelectionChanged » et plus drapeau mais le résultat est toujours nul quelqu'un peut me aider et indiquer où est mon erreur Je vous remercie d'avance

    Répondre

    1

    SelectionChanged est un autre événement, pas une méthode; vous ne pouvez pas le traiter comme une méthode et avoir l'appel du premier événement dans la seconde. Peut-être que vous voulez dire le (non-public) OnSelectionChanged? (vous auriez besoin de spécifier BindingFlags.Instance | BindingFlags.NonPublic)

    +0

    d'abord merci pour votre réponse. Ce n'est que récemment que j'utilise C#. Ce dont j'ai besoin est d'ajouter un événement à un contrôle ajouté lors de l'exécution. Pour cela j'ai trouvé EventInfo ei = dtg.GetType(). GetEvent (eventname); Puis je crée un délégué Déléguer del = Delegate.CreateDelegate (ei.EventHandlerType, .............); pour ajouter un gestionnaire d'événements ei.AddEventHandler (dtg, del); mon ignorance est de créer le délégué pour un événement – cesare

    +0

    @cesare - si vous écrivez ce que vous voulez dire dans * regular * C#, je vais traduire à la réflexion pour vous. –

    +0

    d'abord merci pour votre réponse. Ce n'est que récemment que j'utilise C#. Ce dont j'ai besoin est d'ajouter un événement à un contrôle ajouté lors de l'exécution. Pour cela j'ai trouvé DataGrid dtg = obj comme DataGrid; EventInfo ei = dtg.GetType(). GetEvent (nom de l'événement); Puis Je crée un délégué Délégué del = Delegate.CreateDelegate (ei.EventHandlerType, this, mi); pour ajouter un gestionnaire d'événements ei.AddEventHandler (dtg, del); mais Delegate.CreateDelegate utilise MethodInfo mi = this.GetType(). GetMethod (nomMéthode, BindingFlags.NonPublic); mon problème est de créer le délégué pour un événement pas pour une méthode – cesare

    Questions connexes