VisualTreeHelper.FindElementsInHostCoordinates 메서드

정의

오버로드

FindElementsInHostCoordinates(Point, UIElement)

앱 UI의 지정된 x-y 좌표점 내에 있는 개체 집합을 검색합니다. 개체 집합은 해당 지점을 공유하는 시각적 트리의 구성 요소를 나타냅니다.

FindElementsInHostCoordinates(Rect, UIElement)

앱 UI의 지정된 Rect 프레임 내에 있는 개체 집합을 검색합니다. 개체 집합은 사각형 영역을 공유하는 시각적 트리의 구성 요소를 나타내며 오버드롤하는 요소를 포함할 수 있습니다.

FindElementsInHostCoordinates(Point, UIElement, Boolean)

앱 UI의 지정된 x-y 좌표점 내에 있는 개체 집합을 검색합니다. 개체 집합은 해당 지점을 공유하는 시각적 트리의 구성 요소를 나타냅니다.

FindElementsInHostCoordinates(Rect, UIElement, Boolean)

앱 UI의 지정된 Rect 프레임 내에 있는 개체 집합을 검색합니다. 개체 집합은 사각형 영역을 공유하는 시각적 트리의 구성 요소를 나타내며 오버드롤하는 요소를 포함할 수 있습니다.

FindElementsInHostCoordinates(Point, UIElement)

앱 UI의 지정된 x-y 좌표점 내에 있는 개체 집합을 검색합니다. 개체 집합은 해당 지점을 공유하는 시각적 트리의 구성 요소를 나타냅니다.

public:
 static IIterable<UIElement ^> ^ FindElementsInHostCoordinates(Point intersectingPoint, UIElement ^ subtree);
/// [Windows.Foundation.Metadata.DefaultOverload]
/// [Windows.Foundation.Metadata.Overload("FindElementsInHostCoordinatesPoint")]
 static IIterable<UIElement> FindElementsInHostCoordinates(Point const& intersectingPoint, UIElement const& subtree);
[Windows.Foundation.Metadata.DefaultOverload]
[Windows.Foundation.Metadata.Overload("FindElementsInHostCoordinatesPoint")]
public static IEnumerable<UIElement> FindElementsInHostCoordinates(Point intersectingPoint, UIElement subtree);
function findElementsInHostCoordinates(intersectingPoint, subtree)
Public Shared Function FindElementsInHostCoordinates (intersectingPoint As Point, subtree As UIElement) As IEnumerable(Of UIElement)

매개 변수

intersectingPoint
Point

결정 지점으로 사용할 점입니다. 이 점은 특정 요소가 아닌 앱 창의 좌표 공간을 사용하는 것입니다(지정된 경우 하위 트리 가 아님).

subtree
UIElement

검색할 개체입니다. 지정된 intersectingPoint 좌표에 있는 요소의 전체 집합에 하위 트리 개체가 있는 경우 반환 값에는 하위 트리 개체와 하위 트리보다 z 순서가 높은 개체만 포함되며 z 순서를 역으로 나열합니다. intersectingPoint 좌표에 하위 트리 개체가 없으면 반환 값이 비어 있습니다.

반환

지정된 지점의 시각적 트리 컴퍼지션에 있는 열거 가능한 UIElement 개체 집합으로, z 순서를 역순으로 나열합니다.

특성

예제

지정된 Name 의 요소가 앱의 UI에 있는 지점 의 z 순서에 있는지 여부를 결정하는 예제 유틸리티 메서드입니다.

private bool DoesPointContainElement(Point testPoint, string elementName, UIElement referenceFrame)
{
    IEnumerable<UIElement> elementStack = 
      VisualTreeHelper.FindElementsInHostCoordinates(testPoint, referenceFrame);
    foreach (UIElement item in elementStack)
    {
        FrameworkElement feItem = item as FrameworkElement; 
//cast to FrameworkElement, need the Name property
        if (feItem != null)
        {
            if (feItem.Name.Equals(elementName))
            {
                 return true;
            }
        }
     }
     // elementName was not in this stack 
     return false;
}

설명

반환 값은 단일 요소가 아니라 컬렉션입니다. z 순서로 서로 겹쳐진 여러 UI 요소가 있을 수 있으므로 컬렉션에는 둘 이상의 요소가 있을 수 있습니다. PointerPressed 이벤트의 보낸 사람 값과 같이 입력 이벤트 처리기에서 노출하는 기존의 적중 테스트 기술은 z 순서가 가장 높은 최상위 요소만 고려합니다. FindElementsInHostCoordinates 메서드는 앱 UI에서 해당 지점 또는 영역을 공유하는 요소의 전체 스택을 반환하며 z 순서를 역순으로 나열합니다. 따라서 FindElementsInHostCoordinates를 사용하면 의도적으로 또는 의도치 않게 누적된 요소를 검사하는 데 유용할 수 있습니다. 렌더링 및 적중 테스트 순서를 수정하거나 다른 이유로 해당 순서를 검사할 수 있습니다.

FindElementsInHostCoordinates는 기본 적중 테스트, 특정 요소에 대해 필터링하는 적중 테스트, 동일한 지점에서 오버드롤하는 시각적 트리에 요소가 있는지 여부를 결정하는 세 가지 시나리오에 유용합니다.

기본 적중 테스트

기본 적중 횟수 테스트의 목표는 x-y 좌표의 지정된 지점에서 앱 UI의 z 순서에서 가장 높은 요소를 검색하는 것입니다. 렌더링된 UI에서 최상위를 그리는 요소일 뿐만 아니라 이 요소는 포인터 이벤트와 같은 사용자 상호 작용이 있는 경우 보고된 이벤트 원본이기 때문에 중요합니다. 입력 이벤트가 발생하기 전에 상위 z 순서에 어떤 요소가 있는지 알고자 하는 적중 테스트 시나리오가 있을 수 있으므로 이를 예측하고 z 순서 배치에서 실수를 수정할 수 있습니다.

이 시나리오에서는 적중 테스트에 관심이 있는 지점을 intersectingPoint 매개 변수의 값으로 전달해야 합니다. 하위 트리 매개 변수의 경우 null로 전달할 수 있습니다. 또는 하위 트리 를 페이지의 루트 시각적 개체이거나 적중 테스트의 마지막 중지가 되고자 하는 일부 요소로 지정할 수 있습니다.

z 순서에서 맨 위에 있는 요소는 항상 UIElement 항목의 반환된 IEnumerable에서 첫 번째 요소입니다. 따라서 기본 적중 테스트의 경우 일반적으로 첫 번째 항목에만 관심이 있습니다. IEnumerable의 추가 항목은 해당 시점에 있지만 z 순서로 다시 돌아와 첫 번째 항목 아래에 그리는 다른 요소입니다. 더 뒤로의 요소는 해당 시점에서 입력 이벤트의 원본으로 자신을 보고하지 않으며 최상위 요소만 보고합니다.

요소 필터링 적중 테스트

UI의 특정 지점에 특정 요소가 있는지 여부를 알고 싶은 경우가 있습니다. 그렇다면 intersectingPoint 에 해당 지점을 지정하고 원하는 요소를 하위 트리 매개 변수로 지정할 수 있습니다. 반환 값이 비어 있지 않으면 요소가 UI의 해당 지점에 있음을 의미합니다. 요소가 반환 값의 첫 번째 항목인 경우 이는 요소가 intersectingPoint의 z 순서에서 맨 위에 있음을 의미합니다. 반환 값에 다른 항목이 있고 하위 트리 가 첫 번째 항목이 아닌 경우 다른 항목은 z 순서로 더 높은 intersectingPoint 에서 렌더링되는 요소를 나타냅니다(시각적으로 하위 트리 요소 위에 렌더링됨). 이 경우 하위 트리 는 첫 번째 요소가 아닌 반환된 IEnumerable의 마지막 요소입니다.

반환 값이 비어 있으면 하위 트리 요소가 z-order 값에 존재하지 않았음을 의미합니다.

초과 인출을 찾거나 전체 시각적 트리를 확인합니다.

특히 UI 채우기에 대한 데이터 바인딩의 컬렉션을 사용하는 경우 UI는 동적일 수 있습니다. 따라서 현재 맨 위에 있는 요소를 알아야 하는 경우도 있습니다. 앱에서 사용자가 상호 작용할 수 있는 지점을 예상하고 원하는 상호 작용이 현재 가능한지 확인할 수 있습니다. 이 시나리오에서는 일반적으로 앱 창 내에 있는 유효한 좌표인 (0,0)과 같은 알려진 일부 지점을 나타내는 Point 값을 지정합니다. 하위 트리 매개 변수의 경우 null로 전달할 수 있습니다. 또는 하위 트리 를 페이지의 루트 시각적 개체이거나 적중 테스트의 마지막 중지가 되고자 하는 일부 요소로 지정할 수 있습니다.

참고

하위 트리대해 null을 전달하는 경우 시각적 트리에 Frame 요소 및 ContentPresenter와 같이 페이지 수준 XAML로 정의되지 않은 요소가 포함되어 있는 것을 볼 수 있습니다. 이러한 코드는 UWP 앱에 대한 대부분의 Microsoft Visual Studio 프로젝트 템플릿에 존재하는 일반적인 앱 초기화 코드에서 가져온 것이며, 이 코드는 먼저 FrameWindow.Content 값으로 만듭니다. FindElementsInHostCoordinates 메서드에 표시된 시각적 트리는 Page 루트와 같은 하위 트리 요소로 필터링하지 않는 한 Window.Content까지 확장됩니다.

반환 값에서 내의 각 항목에 관심이 있을 수 있습니다. 따라서 foreach 또는 유사한 언어별 기술을 사용하여 컬렉션을 반복하고 이러한 각 요소에 대해 고유한 논리를 실행할 수 있습니다. 해당 컬렉션의 첫 번째 요소는 z 순서로 가장 맨 위에 있는 요소입니다.

C# 또는 Microsoft Visual Basic을 사용하여 프로그래밍하는 경우 이 메서드의 반환 값 형식은 UIElement 항목이 포함된 IEnumerable 제네릭 컬렉션으로 프로젝션됩니다. Visual C++ 구성 요소 확장(C++/CX)을 사용하여 프로그래밍하는 경우 이 메서드의 반환 형식은 IIterable<UIElement>입니다.

추가 정보

적용 대상

FindElementsInHostCoordinates(Rect, UIElement)

앱 UI의 지정된 Rect 프레임 내에 있는 개체 집합을 검색합니다. 개체 집합은 사각형 영역을 공유하는 시각적 트리의 구성 요소를 나타내며 오버드롤하는 요소를 포함할 수 있습니다.

public:
 static IIterable<UIElement ^> ^ FindElementsInHostCoordinates(Rect intersectingRect, UIElement ^ subtree);
/// [Windows.Foundation.Metadata.Overload("FindElementsInHostCoordinatesRect")]
 static IIterable<UIElement> FindElementsInHostCoordinates(Rect const& intersectingRect, UIElement const& subtree);
[Windows.Foundation.Metadata.Overload("FindElementsInHostCoordinatesRect")]
public static IEnumerable<UIElement> FindElementsInHostCoordinates(Rect intersectingRect, UIElement subtree);
function findElementsInHostCoordinates(intersectingRect, subtree)
Public Shared Function FindElementsInHostCoordinates (intersectingRect As Rect, subtree As UIElement) As IEnumerable(Of UIElement)

매개 변수

intersectingRect
Rect

결정 영역으로 사용할 Rect 입니다. 이 프레임은 특정 요소가 아닌 앱 창의 좌표 공간을 사용합니다(지정된 경우 하위 트리 가 아님).

subtree
UIElement

검색할 개체입니다. 지정된 intersectingRect 내에 있는 전체 요소 집합에 하위 트리 개체가 있는 경우 반환 값에는 하위 트리 개체와 해당 공간 위에 그리는 요소만 포함됩니다. intersectingRect 프레임 내에 하위 트리 개체가 없으면 반환 값이 비어 있습니다.

반환

지정된 Rect 프레임의 시각적 트리 컴퍼지션에 있는 UIElement 개체의 열거 가능한 집합입니다.

특성

예제

이 XAML UI를 지정합니다.

<Canvas Name="canvas">
  <Rectangle Name="outermost" Fill="Red" Width="200" Height="200"/>
  <Rectangle Canvas.Left="40" Canvas.Top="40" Name="hidden" Fill="Green" Width="120" Height="120"/>
  <Rectangle Canvas.Left="40" Canvas.Top="40" Name="shown" Fill="Orange" Width="120" Height="120"/>
  <Rectangle Canvas.Left="80" Canvas.Top="80" Name="center" Fill="Yellow" Width="40" Height="40"/>
  <Rectangle Canvas.Left="190" Canvas.Top="190" Name="bottomright" Fill="Pink" Width="10" Height="10"/>
</Canvas>

다음은 다른 하위 트리 값을 사용하여 FindElementsInHostCoordinates의 몇 가지 사용 및 결과 예제입니다.

private void Test(object sender, RoutedEventArgs e)
{
    IEnumerable<UIElement> hits;
    hits =  VisualTreeHelper.FindElementsInHostCoordinates(
      new Rect(75,75,50,50), canvas);
    foreach (UIElement element in hits)
    {
        //run logic here, such as log the results 
    }
// results in the following set of elements, listed by Name:
// center - the last declared XAML element is first returned, if within the area
// shown - renders, underneath 'center' in part of the area but visible on the edges
// hidden - entirely under 'shown', not visible but part of the area, an overdraw
// outermost - draws under all the above
// canvas - the 'subtree' value, and the last element reported

    hits = VisualTreeHelper.FindElementsInHostCoordinates(
      new Rect(75,75,50,50), center);
    foreach (UIElement element in hits) {
        //run logic here, such as log the results
    }
// results in only 'center', because it was 'subtree' and it's also topmost

    hits = VisualTreeHelper.FindElementsInHostCoordinates(
      new Rect(75,75,50,50), bottomright);
// results in an empty set, 'bottomright' isn't in the specified rect
}

설명

반환 값은 단일 요소가 아니라 컬렉션입니다. z 순서로 서로 겹쳐진 여러 UI 요소와 intersectingRect 프레임의 전체 또는 부분적으로 여러 요소가 있을 수 있으므로 컬렉션에는 둘 이상의 요소가 있을 수 있습니다. PointerPressed 이벤트의 보낸 사람 값과 같이 입력 이벤트 처리기에서 노출하는 기존의 적중 테스트 기술은 z 순서가 가장 높은 최상위 요소만 고려합니다. FindElementsInHostCoordinates 메서드는 시각적 트리 순서로 나열된 앱 UI에서 해당 지점 또는 영역을 공유하는 요소의 전체 스택을 반환합니다(일반적으로 XAML 선언 순서의 역과 동일). 따라서 FindElementsInHostCoordinates를 사용하면 의도적으로 또는 의도치 않게 누적된 요소를 검사하는 데 유용할 수 있습니다. 렌더링 및 적중 테스트 순서를 수정하거나 다른 이유로 해당 순서를 검사할 수 있습니다.

영역에 대한 FindElementsInHostCoordinates 는 특정 요소에 대해 필터링하는 기본 적중 테스트 및 적중 테스트의 두 가지 시나리오에 유용합니다.

기본 적중 테스트

기본 적중 테스트의 목표는 앱 UI의 z 순서에서 가장 높은 요소를 검색하는 것입니다. 마우스 상호 작용에 대한 적중 테스트인 경우 점을 사용할 수 있지만 터치 지향 적중 테스트의 경우 사각형 영역을 사용하는 것이 적절한 경우가 많습니다. 터치 이벤트가 발생하기 전에 최상위 z 순서에 어떤 요소가 있는지 알고자 하는 적중 테스트 시나리오가 있을 수 있습니다. 또는 사각형으로 확장하여 중심점 근처에 있는 요소와 의도한 대상이 될 수 있는 요소를 확인하려는 지점이 있을 수 있습니다.

이 시나리오에서는 적중 테스트에 관심이 있는 사각형을 intersectingRect 매개 변수의 값으로 전달해야 합니다. 하위 트리 매개 변수의 경우 null로 전달할 수 있습니다. 또는 하위 트리 를 페이지의 루트 시각적 개체이거나 적중 테스트의 마지막 중지가 되고자 하는 일부 요소로 지정할 수 있습니다.

반환된 UIElement 항목의 IEnumerable 요소 순서는 영역의 좌표 공간과 z 순서를 모두 차지합니다. 따라서 z 순서가 가장 높지 않아 입력 이벤트의 원본이 될 수 없는 항목에 대한 적중을 얻을 수 있습니다. 동일한 intersectingRect 를 사용하지만 관심 있는 요소를 하위 트리로 전달하여 관심 있는 반환된 목록의 항목에 대해 요소 필터링 적중 테스트를 수행할 수 있습니다.

요소 필터링 적중 테스트

경우에 따라 특정 요소가 UI 영역 내에 있는지 여부를 알고 싶을 수 있습니다. 그렇다면 intersectingRect 에 해당 영역을 지정하고 원하는 요소를 하위 트리 매개 변수로 지정할 수 있습니다. 반환 값이 비어 있지 않으면 요소가 해당 영역의 어딘가에 있음을 의미합니다. 영역을 적중 테스트하는 경우 집합에 둘 이상의 x-y 좌표 요소가 포함되어 있으므로 반환 집합의 순서는 z 순서를 결정하는 데 유용하지 않습니다. 집합에는 다양한 x-y 좌표로 그리는 요소와 완전히 또는 부분적으로 덮어들 수 있는 요소가 혼합되어 있습니다. 오버드래우 상황을 실제로 검사하려면 Point를 사용하는 FindElementsInHostCoordinates의 오버로드를 사용하여 x-y 좌표와 시각적 트리 순서가 더 이상 요인이 되지 않도록 합니다. FindElementsInHostCoordinates(Point,UIElement)를 참조하세요.

반환 값이 비어 있으면 하위 트리 요소가 영역에 없음을 의미합니다.

C# 또는 Microsoft Visual Basic을 사용하여 프로그래밍하는 경우 이 메서드의 반환 값 형식은 UIElement 항목이 포함된 IEnumerable 제네릭 컬렉션으로 프로젝션됩니다. Visual C++ 구성 요소 확장(C++/CX)을 사용하여 프로그래밍하는 경우 이 메서드의 반환 형식은 IIterable<UIElement>입니다.

추가 정보

적용 대상

FindElementsInHostCoordinates(Point, UIElement, Boolean)

앱 UI의 지정된 x-y 좌표점 내에 있는 개체 집합을 검색합니다. 개체 집합은 해당 지점을 공유하는 시각적 트리의 구성 요소를 나타냅니다.

public:
 static IIterable<UIElement ^> ^ FindElementsInHostCoordinates(Point intersectingPoint, UIElement ^ subtree, bool includeAllElements);
/// [Windows.Foundation.Metadata.DefaultOverload]
/// [Windows.Foundation.Metadata.Overload("FindAllElementsInHostCoordinatesPoint")]
 static IIterable<UIElement> FindElementsInHostCoordinates(Point const& intersectingPoint, UIElement const& subtree, bool const& includeAllElements);
[Windows.Foundation.Metadata.DefaultOverload]
[Windows.Foundation.Metadata.Overload("FindAllElementsInHostCoordinatesPoint")]
public static IEnumerable<UIElement> FindElementsInHostCoordinates(Point intersectingPoint, UIElement subtree, bool includeAllElements);
function findElementsInHostCoordinates(intersectingPoint, subtree, includeAllElements)
Public Shared Function FindElementsInHostCoordinates (intersectingPoint As Point, subtree As UIElement, includeAllElements As Boolean) As IEnumerable(Of UIElement)

매개 변수

intersectingPoint
Point

결정 지점으로 사용할 점입니다. 이 점은 특정 요소가 아닌 앱 창의 좌표 공간을 사용하는 것입니다(지정된 경우 하위 트리 가 아님).

subtree
UIElement

검색할 개체입니다. 지정된 intersectingPoint 좌표에 있는 요소의 전체 집합에 하위 트리 개체가 있는 경우 반환 값에는 하위 트리 개체와 하위 트리보다 z 순서가 높은 개체만 포함되며 z 순서를 역으로 나열합니다. intersectingPoint 좌표에 하위 트리 개체가 없으면 반환 값이 비어 있습니다.

includeAllElements
Boolean

bool

true 이면 적중 테스트에 표시되지 않는 것으로 간주되는 요소를 포함하여 교차하는 모든 요소를 포함합니다. false 이면 표시할 수 있는 적중 테스트 가능한 요소만 찾습니다. 기본값은 false입니다.

반환

지정된 지점의 시각적 트리 컴퍼지션에 있는 것으로 결정되는 열거 가능한 UIElement 개체 집합으로, z 순서를 역순으로 나열합니다.

특성

예제

이 XAML UI를 지정합니다.

<Canvas Name="canvas">
  <Rectangle Name="outermost" Fill="Red" Width="200" Height="200"/>
  <Rectangle Canvas.Left="40" Canvas.Top="40" Name="hidden" Fill="Green" Width="120" Height="120"/>
  <Rectangle Canvas.Left="40" Canvas.Top="40" Name="shown" Fill="Orange" Width="120" Height="120"/>
  <Rectangle Canvas.Left="80" Canvas.Top="80" Name="center" Fill="Yellow" Width="40" Height="40"/>
  <Rectangle Canvas.Left="190" Canvas.Top="190" Name="bottomright" Fill="Pink" Width="10" Height="10"/>
</Canvas>

다음은 다른 하위 트리 값을 사용하여 FindElementsInHostCoordinates의 몇 가지 사용 및 결과 예제입니다.

private void Test(object sender, RoutedEventArgs e)
{
    IEnumerable<UIElement> hits;
    hits =  VisualTreeHelper.FindElementsInHostCoordinates(
      new Point(100,100), canvas, true);
    foreach (UIElement element in hits)
    {
        //run logic here, such as log the results 
    }
// results in the following set of elements, listed by Name:
// center - the element that is topmost in z-order at 100,100
// shown - also renders at 100,100 but is underneath 'center'
// hidden - is entirely underneath 'shown', 
//   and lower in z-order because 'hidden' declared before 'shown' in XAML
// outermost - draws under all the above at 100,100
// canvas - the 'subtree' value, so that's the last element reported

    hits = VisualTreeHelper.FindElementsInHostCoordinates(
      new Point(100, 100), center, true);
    foreach (UIElement element in hits) {
        //run logic here, such as log the results
    }
// results in 'center', because it is 'subtree' and also topmost

    hits = VisualTreeHelper.FindElementsInHostCoordinates(
      new Point(100, 100), bottomright, true);
// results in an empty set, 'bottomright' doesn't render at 100,100
}

설명

요소가 레이아웃의 공간을 차지하고 "잉크를 생성"하는 경우 적중 테스트가 가능한 것으로 간주됩니다. Brush가 있는 요소의 경우 브러시가 표시되는 픽셀을 생성하지 않더라도 null 이 아닌 브러시는 잉크를 생성하는 것으로 간주됩니다. 예를 들어 색이 투명으로 설정된 SolidColorBrush는 여전히 잉크를 생성합니다. null 브러시만 잉크를 생성하지 않습니다. Opacity 속성은 고려되지 않습니다. 불투명도가 0인 경우에도 요소는 여전히 잉크를 생성합니다.

includeAllElements 매개 변수를 true로 설정하면 잉크를 생성하지 않는 요소가 적중 테스트로 간주됩니다. 이 경우 요소가 공간 요구 사항을 충족하는 한(지점이 요소 경계를 교차하는 경우) 해당 요소와 해당 상위 항목이 결과에 포함됩니다.

참고

SwapChainPanelMediaElement와 같은 일부 특수 요소는 브러시가 없지만 여전히 잉크를 생성할 수 있습니다.

추가 정보

적용 대상

FindElementsInHostCoordinates(Rect, UIElement, Boolean)

앱 UI의 지정된 Rect 프레임 내에 있는 개체 집합을 검색합니다. 개체 집합은 사각형 영역을 공유하는 시각적 트리의 구성 요소를 나타내며 오버드롤하는 요소를 포함할 수 있습니다.

public:
 static IIterable<UIElement ^> ^ FindElementsInHostCoordinates(Rect intersectingRect, UIElement ^ subtree, bool includeAllElements);
/// [Windows.Foundation.Metadata.Overload("FindAllElementsInHostCoordinatesRect")]
 static IIterable<UIElement> FindElementsInHostCoordinates(Rect const& intersectingRect, UIElement const& subtree, bool const& includeAllElements);
[Windows.Foundation.Metadata.Overload("FindAllElementsInHostCoordinatesRect")]
public static IEnumerable<UIElement> FindElementsInHostCoordinates(Rect intersectingRect, UIElement subtree, bool includeAllElements);
function findElementsInHostCoordinates(intersectingRect, subtree, includeAllElements)
Public Shared Function FindElementsInHostCoordinates (intersectingRect As Rect, subtree As UIElement, includeAllElements As Boolean) As IEnumerable(Of UIElement)

매개 변수

intersectingRect
Rect

결정 영역으로 사용할 Rect 입니다. 이 프레임은 특정 요소가 아닌 앱 창의 좌표 공간을 사용합니다(지정된 경우 하위 트리 가 아님).

subtree
UIElement

검색할 개체입니다. 지정된 intersectingRect 내에 있는 전체 요소 집합에 하위 트리 개체가 있는 경우 반환 값에는 하위 트리 개체와 해당 공간 위에 그리는 요소만 포함됩니다. intersectingRect 프레임 내에 하위 트리 개체가 없으면 반환 값이 비어 있습니다.

includeAllElements
Boolean

bool

true 이면 적중 테스트에 표시되지 않는 것으로 간주되는 요소를 포함하여 교차하는 모든 요소를 포함합니다. false 이면 표시할 수 있는 적중 테스트 가능한 요소만 찾습니다. 기본값은 false입니다.

반환

지정된 Rect 프레임의 시각적 트리 컴퍼지션에 있는 것으로 결정되는 UIElement 개체의 열거 가능한 집합입니다.

특성

예제

이 XAML UI를 지정합니다.

<Canvas Name="canvas">
  <Rectangle Name="outermost" Fill="Red" Width="200" Height="200"/>
  <Rectangle Canvas.Left="40" Canvas.Top="40" Name="hidden" Fill="Green" Width="120" Height="120"/>
  <Rectangle Canvas.Left="40" Canvas.Top="40" Name="shown" Fill="Orange" Width="120" Height="120"/>
  <Rectangle Canvas.Left="80" Canvas.Top="80" Name="center" Fill="Yellow" Width="40" Height="40"/>
  <Rectangle Canvas.Left="190" Canvas.Top="190" Name="bottomright" Fill="Pink" Width="10" Height="10"/>
</Canvas>

다음은 다른 하위 트리 값을 사용하여 FindElementsInHostCoordinates의 몇 가지 사용 및 결과 예제입니다.

private void Test(object sender, RoutedEventArgs e)
{
    IEnumerable<UIElement> hits;
    hits =  VisualTreeHelper.FindElementsInHostCoordinates(
      new Rect(75,75,50,50), canvas, true);
    foreach (UIElement element in hits)
    {
        //run logic here, such as log the results 
    }
// results in the following set of elements, listed by Name:
// center - the last declared XAML element is first returned, if within the area
// shown - renders, underneath 'center' in part of the area but visible on the edges
// hidden - entirely under 'shown', not visible but part of the area, an overdraw
// outermost - draws under all the above
// canvas - the 'subtree' value, and the last element reported

    hits = VisualTreeHelper.FindElementsInHostCoordinates(
      new Rect(75,75,50,50), center, true);
    foreach (UIElement element in hits) {
        //run logic here, such as log the results
    }
// results in only 'center', because it was 'subtree' and it's also topmost

    hits = VisualTreeHelper.FindElementsInHostCoordinates(
      new Rect(75,75,50,50), bottomright, true);
// results in an empty set, 'bottomright' isn't in the specified rect
}

설명

요소가 레이아웃의 공간을 차지하고 "잉크를 생성"하는 경우 적중 테스트가 가능한 것으로 간주됩니다. Brush가 있는 요소의 경우 브러시가 표시되는 픽셀을 생성하지 않더라도 null 이 아닌 브러시는 잉크를 생성하는 것으로 간주됩니다. 예를 들어 색이 투명으로 설정된 SolidColorBrush는 여전히 잉크를 생성합니다. null 브러시만 잉크를 생성하지 않습니다. Opacity 속성은 고려되지 않습니다. 불투명도가 0인 경우에도 요소는 여전히 잉크를 생성합니다.

includeAllElements 매개 변수를 true로 설정하면 잉크를 생성하지 않는 요소가 적중 테스트로 간주됩니다. 이 경우 요소가 공간 요구 사항(사각형이 요소 경계를 교차함)을 충족하는 한 해당 요소와 해당 상위 항목이 결과에 포함됩니다.

참고

SwapChainPanelMediaElement와 같은 일부 특수 요소는 브러시가 없지만 여전히 잉크를 생성할 수 있습니다.

추가 정보

적용 대상