2010-12-13 29 views
0

Dans mon application, je veux m'assurer qu'une TagVisualization n'est affichée que si l'objet étiqueté est placé sur une Ellipse. Donc, j'ai utilisé ce code pour le faire:Comment utiliser VisualTreeHelper # HitTest et TagVisualizer correctement

private void TagVisualizer_VisualizationAdded(object sender, TagVisualizerEventArgs e) 
     { 
      Console.WriteLine("Hitlist"); 

      //Notes 
      if (e.TagVisualization.GetType() == typeof(NoteVisualization)) 
      { 
       bool found = false; 
       Point pt = e.TagVisualization.Center; 
       hitResultsList.Clear(); 
       VisualTreeHelper.HitTest(RootLayer, null, new HitTestResultCallback(MyHitTestResult), new PointHitTestParameters(pt)); 

       if (hitResultsList.Count > 0) 
       { 
        foreach (DependencyObject o in hitResultsList) 
        { 
         if (o.GetType() == typeof(Ellipse)) 
         { 

          Console.WriteLine("Placed on a Sourcefile"); 

          SourceFile sf = (((o as Ellipse).Tag) as SourceFile); 
          GroupBox gp = e.TagVisualization.FindName("GroupHeader") as GroupBox; 
          gp.Header = sf.getFullName(); 
          e.TagVisualization.Tag = sf; 

          SurfaceButton save = e.TagVisualization.FindName("NoteSave") as SurfaceButton; 
          save.Tag = sf; 

          found = true; 
          break; 
         } 



        } 
       } 

       if (!found) 
       { 
        e.TagVisualization.Visibility = System.Windows.Visibility.Collapsed; 
        Console.WriteLine("Placed somewhere else"); 
       } 
      } 
     } 

Je ne suis pas sûr que ce soit la bonne façon, puisque je ne l'évite pas que TagVisualization est affiché, mais je instantanément définir la visibilité à collpased . Je pense qu'il doit y avoir de meilleures façons de faire cela?

Répondre