2010-12-13 3 views
0

В моем приложении я хочу убедиться, что TagVisualization отображается только в том случае, если помеченный объект помещается на Эллипс. Таким образом, я использовал этот код, чтобы сделать это:Как правильно использовать VisualTreeHelper # HitTest и TagVisualizer

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"); 
       } 
      } 
     } 

Я не совсем уверен, что это правильный путь, так как я не избежать, что отображается TagVisualization, но вместо этого я сразу же установить видимость collpased , Я думаю, что должны быть лучшие способы сделать это?

ответ

 Смежные вопросы

  • Нет связанных вопросов^_^