Поделиться через


Практическое руководство. Проверка нажатия с использованием геометрического объекта в качестве параметра

Обновлен: Ноябрь 2007

В этом примере демонстрируется выполнение проверки нажатия визуального объекта с использованием объекта Geometry в качестве параметра проверки нажатия.

Пример

В следующем примере показано, как настроить проверку нажатия, используя параметры GeometryHitTestParameters для метода HitTest. Значение Point, которое было передано методу OnMouseDown, используется для создания объекта Geometry, чтобы расширить диапазон проверки нажатия.

// Respond to the mouse button down event by setting up a hit test results callback.
private void OnMouseDown(object sender, MouseButtonEventArgs e)
{
    // Retrieve the coordinate of the mouse position.
    Point pt = e.GetPosition((UIElement)sender);

    // Expand the hit test area by creating a geometry centered on the hit test point.
    EllipseGeometry expandedHitTestArea = new EllipseGeometry(pt, 10.0, 10.0);

    // Clear the contents of the list used for hit test results.
    hitResultsList.Clear();

    // Set up a callback to receive the hit test result enumeration.
    VisualTreeHelper.HitTest(myControl, null,
        new HitTestResultCallback(MyHitTestResultCallback),
        new GeometryHitTestParameters(expandedHitTestArea));

    // Perform actions on the hit test results list.
    if (hitResultsList.Count > 0)
    {
        ProcessHitTestResultsList();
    }
}

Свойство IntersectionDetail атрибута GeometryHitTestResult предоставляет сведения о результатах проверки нажатия, в которой в качестве параметра используется объект Geometry. На следующем рисунке показано отношение между геометрическим объектом проверки нажатия (синий круг) и отображенным содержимым конечного визуального объекта (красный квадрат).

Пересечение между геометрическим объектом проверки нажатия и конечным визуальным объектом
Схема IntersectionDetail, используемая в проверке нажатия

В следующем примере показано, как реализовать обратный вызов проверки нажатия, если в качестве параметра проверки нажатия используется объект Geometry. Тип параметра result приводится к типу GeometryHitTestResult, чтобы извлечь значение свойства IntersectionDetail. Это значение позволяет определить, полностью или частично параметр проверки нажатия Geometry находится в отображаемом содержимом целевого объекта проверки нажатия. В этом случае код примера только добавляет результаты проверки нажатия в список визуальных объектов, которые полностью содержатся в пределах границы целевого объекта.

// Return the result of the hit test to the callback.
public HitTestResultBehavior MyHitTestResultCallback(HitTestResult result)
{
    // Retrieve the results of the hit test.
    IntersectionDetail intersectionDetail = ((GeometryHitTestResult)result).IntersectionDetail;

    switch (intersectionDetail)
    {
        case IntersectionDetail.FullyContains:

            // Add the hit test result to the list that will be processed after the enumeration.
            hitResultsList.Add(result.VisualHit);

            return HitTestResultBehavior.Continue;

        case IntersectionDetail.Intersects:

            // Set the behavior to return visuals at all z-order levels.
            return HitTestResultBehavior.Continue;

        case IntersectionDetail.FullyInside:

            // Set the behavior to return visuals at all z-order levels.
            return HitTestResultBehavior.Continue;

        default:
            return HitTestResultBehavior.Stop;
    }
}
ms748343.alert_note(ru-ru,VS.90).gifПримечание.

Обратный вызов HitTestResult не должен осуществляться, если для деталей пересечения возвращается значение Empty.

См. также

Задачи

Практическое руководство. Проверка попадания курсора Geometry визуальном объекте

Основные понятия

Проверка попадания на визуальном уровне