우리는 몇 가지 사용자 지정 메시지 창을 표시해야하는 WPF 데스크톱 응용 프로그램이 있습니다. 프리덤 사이언 티픽 (Freedom Scientific)의 JAWS와 같은 스크린 리더가 적절하게 소리내어 읽도록하는 데 어려움을 겪고 있습니다.어떻게 화면 판독기가 Win32 MessageBox를 읽는 것과 비슷한 방법으로 내 WPF 메시지를 읽게합니까?
시스템 메시지 상자를 표시 할 때와 동일한 동작을 원합니다. 비교를 위해 System.Windows.MessageBox.Show("my message", "My Caption);
은 JAWS에 의해 "내 캡션 대화 상자, 내 메시지. 확인 버튼"으로 발표되었습니다. 이것은 완벽 해.
내 메시지 창이 열리면 (및 OK Button
만 포함) 창 제목이 표시되고 포커스가있는 것으로 확인 단추가 발표되지만 TextBlock
메시지가 발표되지 않습니다.
다음은이 문제를 보여주는 간단한 테스트 응용 프로그램입니다. 실제 앱에는 물론 아이콘과 기타 상태 텍스트가 있습니다.
<Window x:Class="Jaws_MessageBox_Test.MyMessageBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Jaws_MessageBox_Test"
mc:Ignorable="d"
Title="MyMessageBox" Height="300" Width="300">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<TextBlock x:Name="mainLabel" Grid.Row="0">Hi there, this is a test to see if JAWS will read the main textbloc when shown.</TextBlock>
<Button Grid.Row="1" Margin="5" HorizontalAlignment="Right" Padding="10,0,10,0" IsDefault="True" x:Name="closeButton" Click="closeButton_Click">_Close</Button>
</Grid>
</Window>
나는이 사용 보여줄 때 :
var mb = new MyMessageBox();
mb.ShowDialog();
스크린 리더는 발표 : 는 ". MyMessageBox 닫기 버튼"이 때문에 시스템 메시지 상자 같은 TextBlock의 수행을 읽는 아니에요. I는 Windows SDK inspect
및 accevent
도구를 사용하여 발견 한 무엇
는
시스템 메시지 상자 접근성 유형이 '대화'하지만 WPF 대화의 접근 유형이 '창'는 것입니다. 이것은 중요 할 수 있습니다. UI 자동화 제어 유형 인 대화 상자 https://msdn.microsoft.com/en-us/library/ms749005(v=vs.110).aspx이 없습니다. 이것은 WPF의 버그 또는 제한입니까?
AutomationPeer
이 더 나은 정보를 갖지만ShowDialog
이 실행될 때 그 중 아무 것도 읽히지 않도록 다양한 'AutomationProperties'연결된 속성을 내 창에서 설정해 보았습니다.TextBlock
은 입력 포커스를받을 수 없기 때문에 탭으로 읽은 텍스트를 가져 오는 방법조차 없습니다. 일시적으로 초점을 맞추기 위해 읽기 전용TextBox
을 사용하지만 경험은 여전히 틀리며 시각 장애인은 간단한 상태 메시지를 읽도록 주위를 둘러 보지 않아도됩니다.실험의 일부로 메시지 창에 대해 자체적으로 파생 된
AutomationPeer
을 만들려고했지만 대화 상자가 시작될 때Core
메서드 내용이 자동으로 읽히지 않습니다. 자동화 하위 목록에는 첫 번째 자식으로 나열된 제목 표시 줄 개체가 있지만 시스템 메시지 상자의 마지막 자식은 현재 변경할 수있는 방법이 없습니다.
시각 장애인을위한 적절한 접근성을 갖춘 WPF 기반 custommessage 상자를 만드는 데 많은 도움을 주시면 감사하겠습니다.
흥미 롭습니다! 나는 그것을 클래스 이름에 사용하는 것을 생각하지 않았다. 이 작업을 시도하면 OS 메시지 상자와 마찬가지로 첫 번째 항목을 자동으로 읽지 않습니다. 그것은 당신을 위해 그들을 읽습니까? 아마도 TextBlock을 변경해야 할 수도 있습니다. – jschroedl
나는 단지 NVDA로 그것을 시험해 보았다. 거기에서 작동한다. 대화 상자 xaml에서 아무 것도 변경할 필요가 없었다. JAWS에서 테스트하고 내 결과를보고합니다. 내가 지금 매우 바쁜 것에 따라 이것은 2,3 주 걸릴 것이다. – batzen
많은 노력을했지만 JAWS가 대화 내용을 읽는 데 필요한 것을 알아낼 수 없었습니다. 아마 JAWS 뒤에서 대화 상대를 감지하는 방법을 회사에 요청해야합니다. JAWS가 내 컴퓨터에서 속도가 많이 느려지므로 JAWS를 제거해야했습니다. – batzen