2009-11-04 5 views
0

J'ai un contrôle Silverlight qui apparaît au-dessus d'un autre (image d'une fenêtre contextuelle). Dans ce contrôle pop-up, j'ai un scrollview (height = 250) avec un panneau de pile (nom de l'instance = spMain, orientation = vertical) à l'intérieur. Dans le contenu du panneau de la pile, plusieurs boîtes de texte sont empilées les unes sur les autres. Lorsque je tabulation de la zone de texte à la zone de texte, le scrollviewer se déplace automatiquement vers le bas (j'ai écrit du code dans un gestionnaire d'événements que toutes les zones de texte sont liées à cela).Erreur hors plage lors de la fermeture de la fenêtre contextuelle

Le problème que j'ai est quand je tente de fermer le contrôle pop-up, je reçois une erreur indiquant que la valeur ne tombe pas dans la fourchette attendue.

 if (sender is TextBox) 
     { 
      TextBox tb = (TextBox)sender; 

      try 
      { 
       // Code bombs out here when I attempt to close out the pop-up control 
       Point pt = tb.TransformToVisual(spMain).Transform(new Point()); 

       if (pt.Y >= scrollViewerHeight - tb.ActualHeight) 
       { 
        svMain.UpdateLayout(); 
        svMain.ScrollToVerticalOffset(scrollViewerHeight += pt.Y); 
       } 
      } 
      catch (ArgumentException aex) 
      { 
       // Don't want to eat the exception 
       string errorMessage = aex.Message; 
       System.Diagnostics.Debug.WriteLine(errorMessage); 
      } 
     } 

Je ne suis pas surpris, je reçois l'erreur, car il semble logique, mais ce que je suis à la recherche est une sorte d'événement Unloaded de contrôle de l'utilisateur ou empêcher le code incriminé d'exécuter.

Est-ce que quelqu'un a des idées sur la façon de s'y prendre?

+0

Pourquoi le code ci-dessus se déclenche-t-il lorsque vous fermez le menu contextuel? – Bryant

Répondre

1

Je pense que le problème réside dans la façon dont vous fermez le popup. Le supprimez-vous de l'arborescence visuelle ou définissez-vous simplement sa visibilité? Si (comme je pense que votre problème le suggère) vous le supprimez entièrement de l'arborescence visuelle, vous pourrez peut-être résoudre le problème immédiat en réduisant d'abord la visibilité de vos zones de texte, puis en supprimant le contrôle. Cela suppose que votre code ci-dessus est appelé à la suite d'un redimensionnement (ou un redimensionnement potentiel) des zones de texte. Alternativement, vous pouvez simplement les vider du contenu avant de les supprimer également. Comme pour un événement Unloaded, il n'y a rien dans le framework qui puisse le faire pour vous. Vous pouvez écrire facilement une méthode de déchargement personnalisée pour votre contrôle, et l'utiliser quand vous voulez l'enlever.

Questions connexes