Как правильно использовать VisualTreeHelper # HitTest и TagVisualizer - PullRequest
0 голосов
/ 13 декабря 2010

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

 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, но вместо этого я мгновенно устанавливаю видимостьв схватке.Я думаю, что должны быть лучшие способы сделать это?

1 Ответ

1 голос
/ 17 декабря 2010

Официальное руководство о том, как это сделать, показано в одном из примеров sdk: http://msdn.microsoft.com/en-us/library/ee804861(v=Surface.10).aspx

-robert (бывший менеджер программ для платформы Surface Dev)

...