기본적인 접근성 정보 표시

기본 접근성 정보는 종종 이름, 역할 및 값으로 분류됩니다. 이 항목에서는 보조 기술에 필요한 기본 정보를 앱에 노출하는 데 유용한 코드에 대해 설명합니다.

액세스 가능한 이름

액세스 가능한 이름은 화면 읽기 프로그램이 UI 요소를 알리기 위해 사용하는 짧은 설명 텍스트 문자열입니다. 콘텐츠를 이해하거나 UI와 상호 작용하는 데 중요한 의미가 있는 요소에 대해 설정합니다. 이러한 요소에는 일반적으로 이미지, 입력 필드, 버튼, 컨트롤 및 리전이 포함됩니다.

이 표에서는 XAML UI에서 다양한 유형의 요소에 대해 액세스 가능한 이름을 정의하거나 가져오는 방법을 설명합니다.

요소 타입 설명
정적 텍스트 TextBlockRichTextBlock 요소의 경우, 액세스 가능한 이름이 자동으로 표시되는(내부) 텍스트에서 결정됩니다. 해당 요소의 모든 텍스트가 이름으로 사용됩니다. 참조할 섹션은 내부 텍스트의 이름입니다.
이미지 XAML 이미지 요소는 HTML alt 속성의 img 및 유사한 요소의 속성과는 직접적인 아날로그가 없습니다. 이름을 제공하기 위해 AutomationProperties.Name 을 사용하거나 캡션 기술을 사용합니다. 참조할 섹션은 이미지의 액세스 기능 이름입니다.
양식 요소 양식 요소에 액세스할 수 있는 이름은 해당 요소에 대해 표시되는 레이블과 동일해야 합니다. 참조할 섹션은 레이블 및 LabeledBy입니다.
버튼과 링크 기본적으로 버튼 또는 링크의 액세스 가능한 이름은 내부 텍스트의 이름 섹션에서 기술한 대로 동일한 규칙을 사용하여 표시되는 텍스트를 기반으로 합니다. 버튼에 이미지만 포함된 경우, AutomationProperties.Name 을 사용하여 버튼의 의도한 작업에 해당하는 텍스트 전용을 제공합니다.

패널과 같은 컨테이너 요소 대부분은 해당 콘텐츠를 접근성 있는 이름으로 승격하지 않습니다. 이는 컨테이너가 아니라, 이름과 해당 역할을 보고해야 하는 항목 콘텐츠이기 때문입니다. 컨테이너 요소는 보조 기술 논리가 트래버스할 수 있도록 Microsoft UI 자동화 표현에 자식이 있는 요소라고 보고할 수 있습니다. 그러나 보조 기술의 사용자는 일반적으로 컨테이너에 대해 알 필요가 없으므로 대부분의 컨테이너는 이름이 지정되지 않습니다.

역할 및 값

XAML 어휘의 일부인 컨트롤 및 기타 UI 요소는 정의의 일부로서 역할 및 값을 보고하기 위한 UI 자동화 지원을 구현합니다. UI 자동화 도구를 사용하여 컨트롤의 역할 및 값 정보를 검사하거나 각 컨트롤의 AutomationPeer 구현에 대한 설명서를 읽을 수 있습니다. UI 자동화 프레임워크에서 사용 가능한 역할은 AutomationControlType 열거형에 정의됩니다. 보조 기술과 같은 UI 자동화 클라이언트는 UI 자동화 프레임워크가 컨트롤의 AutomationPeer를 사용하여 노출하는 메서드를 호출하여 역할 정보를 얻을 수 있습니다.

모든 컨트롤에 값이 있는 것은 아닙니다. 값이 있는 컨트롤은 해당 컨트롤에서 지원하는 피어 및 패턴을 통해 UI 자동화에 이 정보를 보고합니다. 예를 들어 TextBox 양식 요소에는 값이 있습니다. 보조 기술은 UI 자동화 클라이언트일 수 있으며 값이 존재하고 값이 무엇인지 모두 검색할 수 있습니다. 이 특정한 경우 TextBoxIValueProvider 패턴을 TextBoxAutomationPeer 정의를 통해 지원합니다.

참고 항목

만약 AutomationProperties.Name 또는 다른 기술이 액세스 가능한 이름을 명시적으로 지원하는 경우, 컨트롤 역할 또는 형식 정보에 사용되는 것과 동일한 텍스트를 액세스 가능한 이름에 포함하지 마세요. 예를 들어 이름에 "button" 또는 "list"와 같은 문자열은 포함하지 않습니다. 역할 및 형식 정보는 UI 자동화를 위한 기본 컨트롤 지원에서 제공하는 다른 UI 자동화 속성(LocalizedControlType)에서 제공됩니다. 많은 보조 기술이 LocalizedControlType 을 액세스 가능한 이름에 추가하므로, 액세스 가능한 이름에서 역할을 복제하면 불필요하게 반복되는 단어가 생길 수 있습니다. 예를 들어 버튼 컨트롤에 "button"을 부여하거나 이름 끝 부분에 "button"이 포함되게 한다면, 화면 읽기 프로그램에서 "button button"이라고 일을 수 있습니다. 내레이터를 사용하여 접근성 정보의 이 측면을 테스트해야 합니다.

UI 자동화 트리 뷰에 영향을 주는 경우

UI 자동화 프레임워크에는 UI 자동화 클라이언트가 원시, 컨트롤 및 콘텐츠의 세 가지 가능한 뷰를 사용하여 UI의 요소 간의 관계를 검색할 수 있는 트리 뷰 개념이 있습니다. 컨트롤 뷰는 대화형인 UI에서 요소를 적절하게 표현하고 구성하기 때문에 UI 자동화 클라이언트에서 자주 사용하는 뷰입니다. 테스트 도구를 사용하면 대개 도구가 요소의 구성을 표시하는 상황에서 사용할 트리 뷰를 선택할 수 있습니다.

기본적으로 Control 파생 클래스 및 다수의 다른 요소는 UI 자동화 프레임워크가 Windows 앱의 UI를 표시할 때 컨트롤 보기에 나타납니다. UI 컴포지션으로 인해 컨트롤 뷰에 요소를 표시하지 않고자 하는 경우가 있을 수 있는데, 이 경우 해당 요소가 정보를 복제하거나 접근성 시나리오에 중요하지 않은 정보를 표시합니다. 결합속성 AutomationProperties.AccessibilityView 를 사용하여 요소가 트리 뷰에 노출되는 방식을 변경합니다. 만약 원시 트리에 요소를 배치하는 경우, 보조 기술 대다수는 해당 요소를 뷰의 일부로 보고하지 않습니다. 기존 컨트롤에서 작동하는 방식에 대한 몇 가지 예제를 보려면 텍스트 편집기에서 generic.xaml 디자인 참조 XAML 파일을 열고 템플릿에서 AutomationProperties.AccessibilityView 를 검색합니다.

내부 텍스트의 이름

접근성 있는 이름 값에 대해 표시되는 UI에 이미 있는 문자열을 더 쉽게 사용할 수 있도록 하기 위해, 많은 컨트롤 및 기타 UI 요소가 요소 내의 내부 텍스트를 토대로 하거나 콘텐츠 속성의 문자열 값에서 나온 기본 액세스 가능한 이름을 자동으로 결정할 수 있도록 지원합니다.

  • TextBlock, RichTextBlock, TextBoxRichTextBlock은 각각 Text 속성의 값을 기본 접근성 있는 이름으로 승격시킵니다.
  • 어떤 ContentControl 하위클래스든 반복적인 "ToString" 기술을 사용하여 해당 Content 값에서 문자열을 찾고 이러한 문자열을 기본 액세스 가능한 이름으로 승격합니다.

참고 항목

UI 자동화에 의해 적용된 대로, 액세스 가능한 이름 길이는 2048자를 초과할 수 없습니다. 자동으로 액세스 가능한 이름을 결정하는 데 사용되는 문자열이 해당 제한을 초과하면 해당 시점에서 액세스 가능한 이름이 잘립니다.

이미지에 대한 액세스 가능한 이름

화면 읽기 프로그램을 지원하고 UI의 각 요소에 대한 기본 식별 정보를 제공하려면, 이미지 및 차트와 같은 텍스트가 아닌 정보에 대한 텍스트 대안을 제공해야 하는 경우가 있습니다(순전히 장식 또는 구조적 요소 제외). 이러한 요소에는 내부 텍스트가 없으므로 액세스 가능한 이름에는 계산된 값이 없습니다. 이 예제어서 보여주듯 AutomationProperties.Name 결합속성을 설정하여 액세스 가능한 이름을 직접 설정할 수 있습니다.

XAML

<!-- Comment -->
<Image Source="product.png"
  AutomationProperties.Name="An image of a customer using the product."/>

또는 보여지는 UI에 나타나고 이미지 콘텐츠에 대한 레이블 관련 접근성 정보 역할을 하는 텍스트 캡션을 포함하는 것이 좋습니다. 예를 들면 다음과 같습니다.

XAML

<Image HorizontalAlignment="Left" Width="480" x:Name="img_MyPix"
  Source="snoqualmie-NF.jpg"
  AutomationProperties.LabeledBy="{Binding ElementName=caption_MyPix}"/>
<TextBlock x:Name="caption_MyPix">Mount Snoqualmie Skiing</TextBlock>

레이블 및 LabeledBy

레이블을 양식 요소와 연결하는 기본 방식으로는 TextBlock 을 레이블 텍스트에 대한 x:Name 과 사용한 후, 양식 요소에 있는 AutomationProperties.LabeledBy 결합속성을 XAML 이름으로 TextBlock 레이블 지정을 참조하는 것입니다. 이 패턴을 사용하는 경우 지원 기술은 레이블 텍스트를 양식 필드의 액세스 가능한 이름으로 사용할 수 있습니다. 이 기술을 보여 주는 예제는 다음과 같습니다.

XAML

<StackPanel x:Name="LayoutRoot" Background="White">
   <StackPanel Orientation="Horizontal">
     <TextBlock Name="lbl_FirstName">First name</TextBlock>
     <TextBox
      AutomationProperties.LabeledBy="{Binding ElementName=lbl_FirstName}"
      Name="tbFirstName" Width="100"/>
   </StackPanel>
   <StackPanel Orientation="Horizontal">
     <TextBlock Name="lbl_LastName">Last name</TextBlock>
     <TextBox
      AutomationProperties.LabeledBy="{Binding ElementName=lbl_LastName}"
      Name="tbLastName" Width="100"/>
   </StackPanel>
 </StackPanel>

접근성 있는 설명(선택 사항)

액세스 가능한 설명은 특정 UI 요소에 대한 추가 접근성 정보를 제공합니다. 액세스 가능한 이름만으로는 요소의 용도를 적절히 전달하지 못하는 경우, 일반적으로 접근성 있는 설명을 제공합니다.

내레이터 화면 읽기 프로그램은 사용자가 CapsLock+F를 눌러 요소에 대한 자세한 정보를 요청하는 경우에만 요소의 접근성 있는 설명을 읽습니다.

액세스 가능한 이름은 해당 동작을 완전히 문서화하려는 것이 아니라 컨트롤을 식별하기 위한 것입니다. 컨트롤을 설명하는데 간단한 설명으로 불충분한 경우, AutomationProperties.HelpText 결합속성에 AutomationProperties.Name을 더해 설정할 수 있습니다.

접근성 테스트를 초반에 그리고 자주 시행하기

궁극적으로 화면 읽기 프로그램을 지원하는 가장 좋은 방법은 화면 읽기 프로그램을 직접 사용하여 앱을 테스트하는 것입니다. 그러면 화면 읽기 프로그램이 동작하는 방식을 알 수 있고 앱에서 누락될 수 있는 기본 접근성 정보가 표시됩니다. 그런 다음 그에 따라 UI 또는 UI 자동화 속성 값을 조정할 수 있습니다. 자세한 내용은 접근성 테스트를 참조하세요.

접근성 테스트에 사용할 수 있는 도구 중 하나를 AccScope라고 합니다. 이 AccScope 도구가 특히 유용한 이유는 어떻게 보조 기술이 앱을 자동화 트리를 보는 지를 보여주는 UI 표현을 볼 수 있기 때문입니다. 특히, 내레이터 모드에서는 내레이터가 앱에서 텍스트를 가져오는 방법과 UI의 요소를 구성하는 방법에 대해 뷰를 제공합니다. AccScope는 예비 디자인 단계에서도 앱에 대한 개발 주기 전반에 걸쳐 사용 가능하고 유용하게 사용될 수 있도록 설계되었습니다. 자세한 내용은 AccScope을 참조하세요.

동적 데이터에서 액세스할 수 있는 이름

Windows는 데이터 바인딩이라는 기능을 통해 연결된 데이터 원본의 값을 표시하는 데 사용할 수 있는 많은 컨트롤을 지원합니다. 목록을 데이터 항목으로 채우는 경우, 초기 목록이 채워진 후 데이터 바인딩된 목록 항목에 액세스할 수 있는 이름을 설정하는 기술을 사용해야 할 수 있습니다. 자세한 내용은 XAML 접근성 샘플의 "시나리오 4"를 참조하세요.

액세스 가능한 이름 및 지역화

액세스 가능한 이름도 지역화된 요소인지 확인하려면, 지역화가 가능한 문자열을 리소스로 저장한 다음 x:Uid 지시문 값으로 리소스 연결을 참조하는 올바른 기술을 사용해야 합니다. 액세스 가능한 이름을 명시적으로 설정된 AutomationProperties.Name 용례에서 가져오는 경우, 문자열도 지역화할 수 있는지 확인합니다.

예를 들어 AutomationProperties 속성과 같은 결합속성은 리소스 이름에 대해 특수 정규화된 구문을 사용하므로, 리소스가 특정 요소에 적용된 결합속성을 참조합니다. 예를 들어, 이름이 지정된 UI 요소에 적용되는 것처럼 AutomationProperties.Name 에 대한 리소스 이름은 MediumButton 다음과 MediumButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name같습니다.