Видимые элементы на холсте WPF

У меня есть холст WPF и к нему добавлено много фигур (StreamGeometry/Path). У меня есть ScaleTransform, определенный для увеличения определенной области.

Я увеличил произвольное пространство на холсте, и фигуры масштабируются. Теперь можно ли получить фигуры, которые находятся в видимой области холста.

Спасибо за любые указатели.


person Sam    schedule 23.09.2011    source источник


Ответы (2)


Вы можете использовать HitTest для выполнения проверка удара по ограничивающему прямоугольнику Canvas. Дополнительные сведения см. в разделе Тестирование попадания на визуальном уровне и см. образец для проверки попаданий с помощью DrawingVisuals.

person Reed Copsey    schedule 23.09.2011

Должно ли это помочь?

Переберите все дочерние формы холста и проверьте следующее для каждого myShape....

     hitArea
       = new EllipseGeometry(
           new Point(Canvas.GetLeft(myShape), Canvas.GetTop(myShape)),
           1.0, 
           1.0); 

     VisualTreeHelper.HitTest(
          myShape, null,
          new HitTestResultCallback(HitTestCallback),
          new GeometryHitTestParameters(hitArea)); 

     public HitTestResultBehavior HitTestCallback(HitTestResult result)
     {
         if (result.VisualHit == myShape)
         {
              //// This shape is on the visible area.
         }
     }
person WPF-it    schedule 23.09.2011
comment
Спасибо за ответ. Я читал об этом. Как получить верхнюю и левую часть холста? Я добавил все свои объекты геометрии на холст. Я думаю, что если я смогу получить прямоугольник границ холста, я смогу выполнить HitTest. двойной левый = (двойной) холст1.GetValue (Canvas.LeftProperty); двойная вершина = (двойная) canvas1.GetValue(Canvas.TopProperty); это дает мне NaN. - person Sam; 25.09.2011
comment
Используйте это... social.msdn.microsoft.com/forums/en-US/wpf/thread/ - person WPF-it; 26.09.2011