ItemContainer 컨트롤 패턴

메서드에 대한 정보를 포함하여 IItemContainerProvider를 구현하기 위한 지침 및 규칙에 대해 설명합니다. ItemContainer 컨트롤 패턴은 항목 가상화를 지원하는 데 사용됩니다.

많은 수의 자식 항목이 포함된 컨트롤은 가상화를 사용하여 항목을 효율적으로 관리할 수 있습니다. 가상화를 사용하면 컨트롤은 지정된 시간에 항목의 하위 집합에 대해서만 메모리에 전체 정보를 유지 관리합니다. 일반적으로 하위 집합에는 현재 사용자에게 표시되는 항목만 포함됩니다. 나머지 가상화된 항목에 대한 전체 정보는 스토리지에 보관되며, 예를 들어 새 항목이 사용자에게 표시될 때 컨트롤에 필요하므로 메모리에 로드되거나 실현됩니다.

예를 들어 다음 다이어그램은 수천 개의 가상화된 항목이 포함된 목록 상자를 보여 줍니다. 컨트롤은 현재 표시되는 자식 항목에 대해서만 전체 정보를 유지 관리하므로 공급자는 항목 100-127에 대해서만 Microsoft UI 자동화 요소를 노출할 수 있습니다.

가상화되고 가상화되지 않은 목록 상자의 항목을 보여 주는 다이어그램

가상화를 사용하는 컨트롤은 실현된(가상화되지 않은) 항목만 UI 자동화 트리의 UI 자동화 요소로 완전히 사용할 수 있기 때문에 어려운 일입니다. 가상화된 항목이 트리에 없으므로 해당 항목에 대한 정보를 사용할 수 없습니다.

가상화된 항목에 대한 정보를 제공하기 위해 공급자는 IItemContainerProvider 인터페이스를 노출하는 ItemContainer 컨트롤 패턴을 구현합니다. FindItemByProperty 메서드는 Name, AutomationId 또는 IsSelected와 같은 특정 속성의 값을 기반으로 자식 항목을 찾습니다. 항목이 가상화되면 FindItemByProperty는 항목에 대한 UI 자동화 자리 표시자 요소를 검색합니다. 자리 표시자 요소는 VirtualizedItem 컨트롤 패턴만 지원하는 IRawElementProviderSimple 인터페이스의 구현입니다.

IVirtualizedItemProvider::Realiz 메서드를 사용하면 클라이언트가 가상화된 항목의 실현을 요청하여 필요한 모든 속성과 패턴을 사용할 수 있도록 항목에 대한 전체 UI 자동화 요소를 노출할 수 있습니다.

ItemContainer 컨트롤 패턴의 주요 목적은 가상화된 컨테이너 시나리오를 지원하는 것이지만 컨테이너가 가상화를 사용하는지 여부에 관계없이 이름으로 자식 항목을 검색하는 모든 컨테이너에서 구현할 수 있습니다.

이 항목에는 다음과 같은 섹션이 포함되어 있습니다.

구현 지침 및 규칙

ItemContainer 컨트롤 패턴을 구현할 때 다음 지침 및 규칙을 확인합니다.

  • 가상화된 항목을 포함할 수 있는 모든 컨트롤은 ItemContainer 컨트롤 패턴을 지원해야 합니다. 속성 값을 기반으로 항목 검색을 지원하는 모든 컨테이너는 컨테이너가 가상화를 사용하는지 여부에 관계없이 이 패턴을 지원할 수 있습니다.
  • 컨테이너가 가상화되면 선택, 테이블그리드 와 같은 다른 컨트롤 패턴이 영향을 받을 수 있습니다. 예를 들어 ISelectionProvider::GetSelection 메서드는 뷰포트에 있는 요소만 지원하거나 현재 가상화되지 않은 선택한 요소만 지원할 수 있습니다.
  • 스크롤 컨트롤 패턴은 가상화의 영향을 받지 않아야 합니다.
  • 가상화된 항목에 사용할 수 있는 항목 수 또는 인덱스 정보는 없습니다. 가상화된 컨트롤은 필요한 경우 DescribedBy 또는 ItemStatus 속성을 사용하여 이 정보를 제공할 수 있습니다.
  • 컨트롤 개발자는 가상화 사용의 영향을 받는 모든 UI 자동화 속성 및 컨트롤 패턴의 세부 정보를 문서화하고 게시해야 합니다. ItemContainer 및 VirtualizedItem 컨트롤 패턴은 기본 지원을 제공하지만 일부 가상화 동작을 지원하지 않을 수 있습니다.

다음 지침 및 요구 사항은 IItemContainerProvider::FindItemByProperty 메서드에 적용됩니다.

  • 필수는 아니지만 FindItemByPropertyName, AutomationIdIsSelected 속성을 지원하는 것이 좋습니다.
  • 일치하는 개체를 찾기 위해 여러 개체를 트래버스해야 하는 경우 FindItemByProperty가 느려질 수 있습니다.
  • FindItemByProperty 를 반복적으로 호출하여 순서대로 항목을 찾을 수 있습니다. 항목은 각 항목이 한 번만 반환되는 한 순서로 지정할 수 있습니다.
  • FindItemByProperty는 UI 자동화 트리의 컨트롤 또는 콘텐츠 뷰에 표시되는 요소만 찾기 위해 구현될 수 있습니다. 원시 보기에만 표시되는 요소는 사용자에게 "항목"의 일부만 나타내는 여러 요소를 검색하지 않도록 건너뛸 수 있습니다.
  • 검색 조건이 가상화된 항목과 일치하면 공급자는 VirtualizedItem 컨트롤 패턴을 지원하는 자리 표시자 요소를 반환할 수 있습니다. 다음 지침은 자리 표시자 요소에 적용합니다.
    • 가상화된 항목에 대한 자리 표시자 요소를 검색해도 UI가 변경되지 않아야 합니다.
    • 자리 표시자 요소는 다른 자식 요소의 피어여야 합니다(구조 변경된 이벤트가 필요).
    • 가능한 경우 공급자는 자리 표시자 대신 전체 자동화 요소를 만들 수 있습니다.
  • 검색 조건이 가상화되지 않은 요소와 일치하는 경우 공급자는 자리 표시자가 아닌 실제 요소를 반환해야 합니다.
  • 항목을 찾을 수 없는 경우 IItemContainerProvider::FindItemByPropertypFound 매개 변수를 NULL 로 설정하고 S_OK 반환해야 합니다.
  • propertyId 매개 변수가 0이면 공급자는 pStartAfter 다음에 다음 항목을 반환해야 합니다.
  • pStartAfter 매개 변수가 NULL이고 propertyId가 0이면 공급자는 컨테이너의 첫 번째 항목을 반환해야 합니다.
  • propertyId 매개 변수가 0이면 값 매개 변수가 무시됩니다.

다음 지침 및 요구 사항은 UI 자동화 트리의 가상화된 항목에 대한 자리 표시자 요소에 적용됩니다.

  • 공급자는 자리 표시자 요소에 대해 더 많은 속성 및 컨트롤 패턴을 지원하는 것이 권장되지만 VirtualizedItem 컨트롤 패턴만 필요합니다.
  • IItemContainerProvider::FindItemByProperty가 다시 호출되면 공급자가 이전 자리 표시자 요소를 무효화할 수 있습니다. (클라이언트가 자리 표시자 요소를 인식해야 하는 경우 즉시 수행해야 합니다. 그렇지 않으면 FindItemByProperty 가 다시 호출되거나 뷰포트가 어떤 이유로든 변경되면 요소가 무효화될 수 있습니다.)
  • 스크롤 또는 크기 조정과 같은 UI 작업으로 인해 컨테이너의 뷰포트가 변경되고 새 자식 항목 집합이 표시될 수 있습니다. 이 경우 이전에 검색한 자리 표시자 요소를 UI 자동화 트리에서 사용할 수 없습니다.
  • 공급자는 컨테이너 개체의 뷰포트에서 화면에서 사용할 수 있는 UI 요소를 가상화해서는 안 됩니다.

IItemContainerProvider에 필요한 멤버

IItemContainerProvider 인터페이스를 구현하려면 다음 메서드가 필요합니다.

필요한 멤버 멤버 형식 참고
FindItemByProperty 방법 없음

 

ItemContainer 컨트롤 패턴에는 연결된 속성이나 이벤트가 없습니다.

컨트롤 형식 및 지원되는 컨트롤 패턴

UI 자동화 컨트롤 패턴 개요

UI 자동화 트리 개요

VirtualizedItem 컨트롤 패턴