2010-04-09 19 views
1

Je déclare avec succès un modèle de données dans un code sous-jacent comme suit:Comment ajouter gestionnaire dans DataTemplate dynamique

private static DataTemplate CreateTemplate(string sortMemberPath, HorizontalAlignment horzAlignment) 
    { 
     const string xamlFormat 
      = 
      "<DataTemplate xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" >" 
      + "<StackPanel > " 
      + " <TextBlock Margin=\"2,0\" VerticalAlignment=\"Center\" HorizontalAlignment=\"_HALIGNMENT_\" " 
      + 
      "    Text=\"hello there\"> " 
      + " </TextBlock> " 
      + "</StackPanel>" 
      + "</DataTemplate>"; 

     return (DataTemplate) XamlReader.Load(xamlReturned); 
    } 

Mais maintenant, je veux ajouter une taille gestionnaire modifiée en changeant la ligne:

  + "<StackPanel > " 

à

  + "<StackPanel SizeChanged="SizeChangedHandler" > " 

J'ai la méthode "SizeChangedHandler" a déclaré dans le code sous-jacent. Cela entraîne une erreur d'analyse xaml lorsque le contrôle tente de se charger au moment de l'exécution. Je soupçonne qu'il ne peut pas trouver le gestionnaire "SizeChangedHandler". Comment puis-je spécifier ce gestionnaire pour que l'analyseur xaml soit heureux.

Répondre

1

Vous pouvez essayer quelque chose comme:

dataTemplate.VisualTree.AddHandler(StackPanel.SizeChangedEvent, new SizeChangedEventHandler(SizeChangedHandler)); 

Edit:

Ok, pour Silverlight, vous pouvez essayer la méthode LoadContent du DataTemplate qui retourne et UIElement auquel vous pouvez ATACH l'événement. Désolé, je n'ai pas VS prêt à tester et voir si ça fonctionne atm.

+0

Il semble que dans Silverlight 2 un DataTemplate n'expose pas une propriété VisualTree. –

+0

@Phillip Ngan voir mon édition. –