.NET Framework のアクセシビリティの新機能

.NET Framework は、ユーザーのためにアプリケーションのアクセシビリティ向上を目指しています。 ユーザー補助機能により、支援機能の利用者にとってアプリケーションがさらに使いやすくなります。 .NET Framework 4.7.1 以降、.NET Framework にはさまざまなアクセシビリティ機能改善が含まれるようになりました。それを利用することで開発者はアクセシビリティを備えたアプリケーションを開発できます。

アクセシビリティのスイッチ

アプリのターゲットが .NET Framework 4.7 である場合、またはそれより前のバージョンがターゲットであっても実行環境が .NET Framework 4.7.1 以降である場合は、ユーザー補助機能を使用するようにアプリを構成できます。 また、アプリのターゲットが 4.7.1 .NET Framework 以降である場合は、従来の機能を使用するように (そして、ユーザー補助機能を利用しないように) アプリを構成することもできます。 ユーザー補助機能が含まれる .NET Framework の各バージョンには、バージョン固有のアクセシビリティ スイッチがあります。これを、アプリケーションの構成ファイルの <runtime> セクションの <AppContextSwitchOverrides> 要素に追加します。 サポートされているスイッチは次のとおりです。

バージョン Switch
.NET Framework 4.7.1 "Switch.UseLegacyAccessibilityFeatures"
.NET Framework 4.7.2 "Switch.UseLegacyAccessibilityFeatures.2"
.NET Framework 4.8 "Switch.UseLegacyAccessibilityFeatures.3"
2020 年 8 月 11 日- KB4569746 .NET Framework 4.8 の累積的な更新プログラム "Switch.UseLegacyAccessibilityFeatures.4"
.NET Framework 4.8.1 "Switch.UseLegacyAccessibilityFeatures.5"

アクセシビリティ拡張機能の利用

.NET Framework 4.7.1 以降をターゲット対象とするアプリケーションでは、この新しいユーザー補助機能が既定で有効になっています。 また、それより前のバージョンの .NET Framework がターゲットであっても、実行環境が .NET Framework 4.7.1 以降であるアプリケーションの場合は、アプリケーションの構成ファイルの <runtime> セクションの <AppContextSwitchOverrides> 要素にスイッチを追加し、値を false に設定することで、古いアクセシビリティ動作を利用しないことを (そして、それにより向上したアクセシビリティ機能改善を利用することを) 選択できます。 次のスニペットは、.NET Framework 4.7.1 で導入されたアクセシビリティの機能強化を有効にする方法を示しています。

<runtime>
    <!-- AppContextSwitchOverrides value attribute is in the form of key1=true|false;key2=true|false  -->
    <AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false" />
</runtime>

より新しい .NET Framework バージョンのユーザー補助機能を選択する場合は、以前のバージョンの機能も明示的に選択する必要があります。 .NET Framework 4.7.1 と 4.7.2 両方のアクセシビリティ機能改善を利用するようにアプリを構成するには、次の <AppContextSwitchOverrides> 要素を追加します。

<runtime>
    <!-- AppContextSwitchOverrides value attribute is in the form of key1=true|false;key2=true|false  -->
    <AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false" />
</runtime>

.NET Framework 4.7.1、4.7.2、4.8、および 2020 年 8 月の .NET Framework 4.8 の累積的な更新プログラムでのアクセシビリティ向上を利用するようにアプリを構成するには、次の <AppContextSwitchOverrides> 要素を追加します。

<runtime>
    <!-- AppContextSwitchOverrides value attribute is in the form of key1=true|false;key2=true|false  -->
    <AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false;Switch.UseLegacyAccessibilityFeatures.3=false;Switch.UseLegacyAccessibilityFeatures.4=false"/>
</runtime>

従来の動作に戻す

アプリケーションがバージョン 4.7.1 以降の .NET Framework をターゲットにしている場合、アプリケーションの構成ファイルで <runtime> セクションの <AppContextSwitchOverrides> 要素にスイッチを追加し、値を true に設定することで、アクセシビリティ機能を無効にできます。 たとえば、次の構成は、.NET Framework 4.7.2 で導入されたユーザー補助機能を無効にします。

<runtime>
    <!-- AppContextSwitchOverrides value attribute is in the form of key1=true|false;key2=true|false  -->
    <AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures.2=true" />
</runtime>

.NET Framework 4.8.1 のユーザー補助の新機能

.NET Framework 4.8.1 には、次の領域の新しいユーザー補助機能が含まれています。

Windows フォーム

UIA 表現の追加と改善

.NET Framework 4.8.1 より前は、アプリケーションとやりとりする支援技術をサポートするための幅広い UIA パターンのサポートが Windows フォームにはありませんでした。 この不足により、ナレーターやその他のスクリーン リーダーが不完全または正しくない情報を報告するおそれがありました。 また、TextBox コントロール内のテキスト内でカーソルを移動するなどの重要な機能にも影響するおそれがありました。 .NET Framework 4.8.1 では、共通コントロールに必要なすべてのパターンが実装されています。 この新しい機能により、支援技術のユーザーに対して、より豊富なアプリケーション操作エクスペリエンスを実現します。

  • UIA 展開/折りたたみパターンのサポートを DateTimePicker コントロールに追加しました。
  • UIA のサポートを MonthCalendar コントロールに追加しました。 ナレーターなどの支援技術ツールで、コントロール内の個々の日付間を移動できるようになりました。
  • TextBoxMaskedTextBoxPropertyGrid 編集コントロール、DataGridViewTextBoxCellToolStripTextBoxDomainUpDown コントロールなど、すべてのテキスト ベースのコントロールに対するテキスト パターンのサポートを実装しました。
  • ToolTip は現在、WCAG2.1 のガイドラインに従って、Windows 11 で保持、無視可能、ホバー可能にすることができます。 ツールヒントの動作の変更は、.NET Framework 4.8.1 がインストールされている Windows 11 システムに限定され、ツールヒントにタイムアウトが設定されていないアプリケーションにのみ適用されます。 保持されているツールヒントは、Esc キーまたは Ctrl キーを使用して閉じるか、別のツールヒント セットを持つコントロールに移動して閉じることができます。

既存のユーザー補助機能のさまざまなバグ修正

  • ナレーターが空 DataGridView のコントロールにフォーカスできるようになりました。
  • スクリーン リーダーが、DataGridView コントロールの列数を通知するときに、非表示の列をカウントする問題に対処しました。
  • 基になるフォームに DefaultFont とは異なる Font プロパティがある場合、DataGridViewDataGridviewCellStyle に設定されているフォント設定を無視する問題に対処しました。
  • DataGridView コントロールの内部スクロール バーの AccessibleName プロパティを更新し、"ScrollBar" というテキストを削除しました。
  • セルが選択されたときの DataGridViewLinkCell の色を修正しました。
  • カスタム DataGridViewCell 要素の ControlType または LocalizedControlType が指定されていないカスタム DataGridView コントロールに関する問題を修正しました。
  • ToolStripRenderModeSystem に設定されている ToolStripButton コントロールの輝度比を 3.5:1 に更新しました。
  • 要素が ToolStripComboBox 型である場合の ToolStrip のキーボード ナビゲーションが改善されました。
  • ハイ コントラスト モードでの ToolStripButton の背景色を更新しました。
  • ToolStripSeparator の支援技術に報告された境界ボックスがあることを確認しました。
  • PropertyGrid コントロールの読み取り時にスクリーン リーダー JAWS がクラッシュするおそれがある問題を修正しました。
  • Font のような複雑なエントリが展開されたときに、PropertyGrid コントロールの UIA 階層ツリーが更新されることを確認しました。 また、エントリが折りたたまれて表示されなくなったときに、ツリーが正しく更新されることを確認しました。
  • PropertyGrid カテゴリに PropertyGrid category のローカライズされたコントロール型が含まれるようになりました。
  • Windows 用の Accessibility Insights でアプリがクラッシュするおそれがある ComboBox の問題を修正しました。
  • Button の罫線の色を更新し、既定の色とのコントラストを増やしました。
  • 最大化された MDI 子フォームの ControlBox ボタンにアクセスするための支援技術ツールを有効にしました。
  • AccessibleName コントロールの DomainUpDown プロパティには、空の文字列の新しい既定値があります。 空の文字列を使用すると、開発者は、以前の空でない既定値をそのまま使用する代わりに、わかりやすい名前を作成できます。
  • PrintPreviewDialog の印刷ボタンの AccessibleName プロパティを、[印刷ボタン] から [印刷] に更新して、スクリーン リーダーがコントロールとその種類を読み上げる場合に冗長になることを避けました。
  • ComboBox 型の PropertyGrid セルが閉じられ、表示されなくなったときに空のリスト要素を削除するように UIA リスト コントロールを更新しました。

Windows Presentation Foundation (WPF)

アクセス可能ツールヒントの処理の向上

このリリースでは、WPF では、Esc キー、Ctrl キー (単独)、または Ctrl + Shift + F10 の組み合わせを使用して、現在のウィンドウのツールヒントを簡単に閉じられるようにすることで、エクスペリエンスが向上しました。 Esc キーのスコープが、以前は、アプリケーションで開いているツールヒントに適用されていましたが、このリリースでは、現在のウィンドウにのみ適用されるように縮小されました。 既定で、WPF ヒントは WCAG2.1 のガイドライン に従って、保持、無視可能、ホバー可能になります。

.NET Framework 4.8 用の 2020 年 8 月 11 日の累積的な更新プログラムにおけるアクセシビリティの新機能

2020 年 8 月 11 日 - KB4569746 .NET Framework 4.8 の累積的な更新プログラムには、Windows フォームの新しいユーザー補助機能が含まれています。

  • スクリーン リーダーによる PropertyGrid コントロール項目およびカテゴリの展開または折りたたみ状態の通知に関する問題に対処します。

  • PropertyGrid コントロールとその内部要素のアクセス可能なパターンを更新します。

  • スクリーン リーダーによって正しく通知されるように、PropertyGrid コントロールの内部要素のアクセス可能な名前を更新します。

  • PropertyGridView コントロールの境界ボックスのアクセス可能なプロパティに対処します。

  • DataGridView コンボ ボックスのセルの展開または折りたたみ状態をスクリーン リーダーで正しく通知できるようにします。

.NET Framework 4.8 のアクセシビリティの新機能

.NET Framework 4.8 には、次の領域の新しいユーザー補助機能が含まれています。

Windows フォーム

.NET Framework 4.8 では、多くの一般的に使用されているコントロールに対する LiveRegion と通知イベントのサポートが Windows フォームで追加されました。 ユーザーがキーボードを使用してコントロールに移動するときのツールヒントのサポートも追加されました。

Label と StatusStrip の UIA LiveRegion サポート

アプリケーション開発者は UIA LiveRegion を使用することで、ユーザーが作業しているところからは離れた場所にあるコントロールのテキスト変更をスクリーン リーダーに通知することができます。 これは、たとえば接続状態を示す StatusStrip コントロールなどで便利です。 接続が切断されて状態が変わった場合に、開発者はスクリーン リーダーに通知することができます。

.NET Framework 4.8 以降、Windows フォームでは LabelStatusStrip 両方のコントロールに対して UIA LiveRegion が実装されています。 たとえば、次のコードでは LiveRegion が label1という名前の Label コントロールで使用されています。

public Form1()
{
   InitializeComponent();
   label1.AutomationLiveSetting = AutomationLiveSetting.Polite;
}

…
Label1.Text = "Ready!";

ユーザーがアプリケーションの操作中であるかどうかに関わらず、ナレーターにより "Ready" と読み上げられます。

UserControl を LiveRegion として実装することもできます。

using System;
using System.Windows.Forms;
using System.Windows.Forms.Automation;

namespace WindowsFormsApplication
{
   public partial class UserControl1 : UserControl, IAutomationLiveRegion
   {
      public UserControl1()
      {
         InitializeComponent();
      }

      public AutomationLiveSetting AutomationLiveSetting { get; set; }
      private AutomationLiveSetting IAutomationLiveRegion.GetLiveSetting()
      {
         return this.AutomationLiveSetting;
      }

      protected override void OnTextChanged(EventArgs e)
      {
         base.OnTextChanged(e);
         AutomationNotifications.UiaRaiseLiveRegionChangedEvent(this.AccessibilityObject);
      }
   }
}

UIA 通知イベント

Windows 10 Fall Creators Update で導入された UIA 通知イベントをアプリで使用すると、UIA イベントを発生させ、対応するコントロールを UI に準備することなく、イベント用に指定したテキストに基づいてナレーターに単純に読み上げさせることができます。 一部のシナリオでは、これはアプリのアクセシビリティを飛躍的に向上させる最も簡単な方法です。 長時間かかる可能性のあるいくつかのプロセスの進行状況を通知するのにも便利です。 UIA 通知イベントの詳細については、デスクトップ アプリで新しい UI 通知イベントを使用する方法に関する記事を参照してください。

次の例では、通知イベントを発生させています。

MethodInfo raiseMethod = typeof(AccessibleObject).GetMethod("RaiseAutomationNotification");
if (raiseMethod != null) {
   raiseMethod.Invoke(progressBar1.AccessibilityObject, new object[3] {/*Other*/ 4, /*All*/ 2, "The progress is 50%." });
}

キーボード アクセスのツールヒント

.NET Framework 4.7.2 以前のバージョンをターゲットとしたアプリケーションでは、tooltip コントロールがポップ アップするようトリガーする唯一の方法は、マウス ポインターをそのコントロールに移動することでした。 .NET Framework 4.8 以降、キーボードを使用するユーザーは、Tab キーまたは方向キーを修飾キーと共に、または修飾キーなしで使用してコントロールにフォーカスすることで、コントロールのヒントをトリガーできます。 この特別なアクセシビリティの機能強化には、追加の AppContext スイッチが必要となります。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
   <startup>
      <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/>
   </startup>
   <runtime>
      <!-- AppContextSwitchOverrides values are in the form of key1=true|false;key2=true|false  -->
      <!-- Please note that disabling Switch.UseLegacyAccessibilityFeatures, Switch.UseLegacyAccessibilityFeatures.2 and Switch.UseLegacyAccessibilityFeatures.3 is required to disable Switch.System.Windows.Forms.UseLegacyToolTipDisplay -->
      <AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false;Switch.UseLegacyAccessibilityFeatures.3=false;Switch.System.Windows.Forms.UseLegacyToolTipDisplay=false"/>
   </runtime>
</configuration>

次の図は、ユーザーがキーボードを使用してボタンを選択したときのツールヒントを示しています。

ユーザーがキーボードを使用してボタンに移動したときのツールヒントのスクリーンショット。

Windows Presentation Foundation (WPF)

.NET Framework 4.8 以降、WPF に数多くのアクセシビリティ機能改善が導入されました。

可視性が Collapsed または Hidden の要素はスクリーン ナレーターで読み上げられない

可視性が Collapsed または Hidden の要素は、スクリーン リーダーによって読み上げられなくなりました。 可視性が Visibility.Collapsed または Visibility.Hidden の要素を含むユーザー インターフェイスは、スクリーン リーダーによってユーザーに読み上げるときに誤って伝わる場合があります。 .NET Framework 4.8 以降、WPF では UIAutomation ツリーのコントロール ビューに Collapsed または Hidden の要素は含まれないため、スクリーン リーダーによってこれらの要素が読み上げられることは今後ありません。

非装飾ベースのテキスト選択での SelectionTextBrush プロパティの使用

.NET Framework 4.7.2 では、装飾層を使用せずに TextBoxPasswordBox テキスト選択を描画する機能が WPF に追加されました。 このシナリオでは、選択したテキストの前景色は SystemColors.HighlightTextBrush により指定されています。

.NET Framework 4.8 で追加された新しいプロパティ SelectionTextBrush を使用すると、開発者は非装飾ベースのテキスト選択を使用する場合に、選択したテキストに対して特定のブラシを選ぶことができます。 このプロパティは、非装飾ベースのテキスト選択が有効な WPF アプリケーション内の TextBoxBase から派生したコントロールと PasswordBox コントロールでのみ機能します。 RichTextBox コントロールでは機能しません。 非装飾ベースのテキスト選択が有効ではない場合、このプロパティは無視されます。

このプロパティを使用するには、単に XAML コードに追加して、適切なブラシまたはバインドを使用します。 結果のテキスト選択は次のようになります。

実行中のアプリのスクリーンショット。Hello World という言葉が選択されています。

SelectionBrushSelectionTextBrush プロパティを組み合わせて使用することで、背景色と前景色の適切な組み合わせを生成することができます。

UIAutomation ControllerFor プロパティのサポート

UIAutomation の ControllerFor プロパティは、このプロパティをサポートするオートメーション要素によって操作されるオートメーション要素の配列を返します。 このプロパティは通常、自動提案アクセシビリティで使用されます。 ControllerForは、オートメーション要素がアプリケーション UI またはデスクトップの 1 つ以上のセグメントに影響する場合に使用されます。 それ以外の場合、コントロール操作の影響を UI 要素と関連付けることは困難です。 この機能により、コントロールで ControllerForプロパティの値を指定できるようになります。

.NET Framework 4.8 では、新しい仮想メソッド GetControlledPeersCore() が追加されました。 ControllerFor プロパティの値を指定するには、単にこのメソッドをオーバーライドして、この AutomationPeer で操作されているコントロールの List<AutomationPeer> を返します。

public class AutoSuggestTextBox: TextBox
{
   protected override AutomationPeer OnCreateAutomationPeer()
   {
      return new AutoSuggestTextBoxAutomationPeer(this);
   }

   public ListBox SuggestionListBox;
}

internal class AutoSuggestTextBoxAutomationPeer : TextBoxAutomationPeer
{
   public AutoSuggestTextBoxAutomationPeer(AutoSuggestTextBox owner) : base(owner)
   {
   }

   protected override List<AutomationPeer> GetControlledPeersCore()
   {
      List<AutomationPeer> controlledPeers = new List<AutomationPeer>();
      AutoSuggestTextBox owner = Owner as AutoSuggestTextBox;
      controlledPeers.Add(UIElementAutomationPeer.CreatePeerForElement(owner.SuggestionListBox));
      return controlledPeers;
   }
}

キーボード アクセスのツールヒント

.NET Framework 4.7.2 以前のバージョンでは、ツールヒントはユーザーがマウス カーソルをコントロールの上に置いたときにのみ表示されます。 .NET Framework 4.8 では、ツールヒントはキーボード フォーカス上に、そしてキーボード ショートカットによっても表示されます。

この機能を使用するには、アプリケーションで .NET Framework 4.8 をターゲットとするか、または Switch.UseLegacyAccessibilityFeatures.3Switch.UseLegacyToolTipDisplayAppContext スイッチを使用してオプトインする必要があります。 サンプルのアプリケーション構成ファイルを以下に示します。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
   <startup>
      <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
   </startup>
   <runtime>
      <AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false;Switch.UseLegacyAccessibilityFeatures.3=false;Switch.UseLegacyToolTipDisplay=false" />
   </runtime>
</configuration>

一度有効にすると、ツールヒントを含むすべてのコントロールで、キーボード フォーカスをコントロールが受けるとツールヒントが表示されます。 ツールヒントは時間が経過したとき、またはキーボード フォーカスが変わったときに、消すことができます。 ユーザーは新しいキーボード ショートカット Ctrl + Shift + F10 を使用してツールヒントを手動で消すこともできます。 ツールヒントが消えたら、同じキーボード ショートカットを使用して再度表示することができます。

注意

Ribbon コントロール上の リボンのツールヒントは、キーボード フォーカスに表示されません。キーボード ショートカットでのみ表示されます。

UIAutomation プロパティの SizeOfSet および PositionInSet のサポートを追加

Windows 10 では 2 つの新しい UIAutomation プロパティである SizeOfSetPositionInSet が導入されました。アプリケーションで使用してセット内の項目数を示すことができます。 スクリーン リーダーなどの UIAutomation クライアント アプリケーションは、これらのプロパティに関してアプリケーションに照会して、アプリケーションの UI の正確な表記を読み上げることができます。

.NET Framework 4.8 以降、WPF ではこれら 2 つのプロパティが WPF アプリケーションの UIAutomation に公開されています。 その方法は 2 つあります。

  • 依存関係プロパティを使用。

    WPF では 2 つの新しい依存関係プロパティである AutomationProperties.SizeOfSetAutomationProperties.PositionInSet が追加されました。 開発者は XAML を使用してその値を設定できます。

    <Button AutomationProperties.SizeOfSet="3"
      AutomationProperties.PositionInSet="1">Button 1</Button>
    
    <Button AutomationProperties.SizeOfSet="3"
      AutomationProperties.PositionInSet="2">Button 2</Button>
    
    <Button AutomationProperties.SizeOfSet="3"
      AutomationProperties.PositionInSet="3">Button 3</Button>
    
  • AutomationPeer 仮想メソッドをオーバーライド。

    GetSizeOfSetCore()GetPositionInSetCore() 仮想メソッドが、AutomationPeer クラスに追加されました。 次の例に示すように、開発者はこれらのメソッドをオーバーライドすることで、SizeOfSetPositionInSet の値を指定できます。

    public class MyButtonAutomationPeer : ButtonAutomationPeer
    {
      protected override int GetSizeOfSetCore()
      {
          // Call into your own logic to provide a value for SizeOfSet
          return CalculateSizeOfSet();
      }
    
      protected override int GetPositionInSetCore()
      {
          // Call into your own logic to provide a value for PositionInSet
          return CalculatePositionInSet();
      }
    }
    

さらに、ItemsControl インスタンス内の項目により、これらのプロパティの値を自動的に、開発者による追加のアクションなしで指定することができます。 ItemsControl がグループ化されている場合、グループのコレクションはセットとして表されます。各グループは別々のセットとしてカウントされ、グループ内の各項目ではグループ内の自身の位置とグループのサイズが示されます。 自動値は仮想化によって影響を受けません。 項目は実現されていない場合でも、セットの合計サイズに含まれ、その兄弟項目のセット内の位置に影響を与えます。

自動値は、アプリケーションが .NET Framework 4.8 をターゲットとしている場合のみ提供されます。 以前のバージョンの .NET Framework をターゲットとするアプリケーションの場合は、次の App.config ファイルに示すように、Switch.UseLegacyAccessibilityFeatures.3AppContext スイッチを設定することができます。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
   <startup>
      <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
   </startup>
   <runtime>
      <AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false;Switch.UseLegacyAccessibilityFeatures.3=false" />
   </runtime>
</configuration>

Windows Workflow Foundation (WF) ワークフロー デザイナー

.NET Framework 4.8 ではワークフロー デザイナーに次の変更が行われました。

  • ナレーターを使用するユーザー向けの、FlowSwitch case ラベルの改善。

  • ナレーターを使用するユーザー向けの、ボタン説明の改善。

  • ハイ コントラスト テーマを選ぶユーザー向けの、要素間のコントラスト比の向上や、フォーカス要素に使われる選択ボックスの認識性の向上など、ワークフロー デザイナーとそのコントロールの表示に関する改善。

アプリケーションが .NET Framework 4.7.2 以前のバージョンをターゲットとしている場合、アプリケーション構成ファイルで Switch.UseLegacyAccessibilityFeatures.3AppContext スイッチfalse に設定することで、これらの変更にオプトインすることができます。 詳細については、この記事の「アクセシビリティ拡張機能の利用」セクションを参照してください。

.NET Framework 4.7.2 のアクセシビリティの新機能

.NET Framework 4.7.2 には、次の領域の新しいユーザー補助機能が含まれています。

Windows フォーム

ハイ コントラスト テーマでの OS で定義された色

.NET Framework 4.7.2 以降、Windows フォームは、オペレーティング システムで定義されている色をハイ コントラスト テーマで使用します。 これは、次のコントロールに影響します。

ナレーターの機能強化

.NET Framework 4.7.2 以降では、ナレーターのサポートが次のように強化されました。

  • ToolStripMenuItem のテキストを読み上げるときに、ToolStripMenuItem.ShortcutKeys プロパティの値を読み上げます。

  • ToolStripMenuItemEnabled プロパティが false に設定されている場合、それを示します。

  • ListView.CheckBoxes プロパティが true に設定されているとき、チェック ボックスの状態に関するフィードバックを提供します。

  • ナレーター スキャン モードのフォーカス順序が、ClickOnce ダウンロード ダイアログ ウィンドウでのコントロールの視覚的な順序と一致します。

DataGridView の機能強化

.NET Framework 4.7.2 以降、DataGridView コントロールには次のアクセシビリティ機能改善が導入されました。

視覚的な手掛かりの向上

  • Text プロパティが空の RadioButton および CheckBox コントロールは、フォーカスを受け取るとフォーカス インジケーターを表示します。

強化されたプロパティ グリッドのサポート

  • PropertyGrid コントロールの子要素は、PropertyGrid 要素が有効になっている場合にのみ、IsReadOnlyProperty プロパティに対して true を返すようになりました。

  • PropertyGrid コントロールの子要素は、PropertyGrid 要素をユーザーが変更できる場合にのみ、IsEnabledProperty プロパティに対して false を返します。

キーボード ナビゲーションの向上

Windows Presentation Foundation (WPF)

CheckBox および RadioButton コントロールに対する変更

.NET Framework 4.7.1 以前のバージョンでは、WPF の System.Windows.Controls.CheckBox および System.Windows.Controls.RadioButton コントロールのフォーカス ビジュアルに整合性がなく、クラシック テーマとハイ コントラスト テーマでは正しくありません。 これらの問題は、コントロールに内容が何も設定されていない場合に発生します。 これにより、テーマ間の遷移が混乱し、フォーカス ビジュアルが見にくくなることがあります。

.NET Framework 4.7.2 では、これらのビジュアルのテーマ間の整合性が向上し、クラシック モードとハイ コントラスト テーマでの視認性がよくなっています。

WPF アプリケーションでホストされる WinForms コントロール

.NET Framework 4.7.1 以前のバージョンの WPF アプリケーションでホストされている WinForms コントロールでは、そのレイヤーの最初または最後のコントロールが WPF ElementHost コントロールの場合、ユーザーは Tab キーで WinForms レイヤーから外に移動できませんでした。 .NET Framework 4.7.2 では、ユーザーは Tab キーで WinForms レイヤーから外に移動できます。

ただし、WinForms レイヤーをエスケープしないフォーカスに依存する自動化アプリケーションは、意図したように機能しなくなる可能性があります。

.NET Framework 4.7.1 のアクセシビリティの新機能

.NET Framework 4.7.1 には、次の領域の新しいユーザー補助機能が含まれています。

Windows Presentation Foundation (WPF)

スクリーン リーダーの機能強化

アクセシビリティ機能改善を有効にすると、.NET Framework 4.7.1 は次の面でスクリーン リーダーの機能を強化します。

  • .NET Framework 4.7 以前のバージョンでは、Expander コントロールはスクリーン リーダーによってボタンとして読み上げられました。 .NET Framework 4.7.1 以降では、展開と折りたたみが可能なグループとして正しく読み上げられます。

  • .NET Framework 4.7 以前のバージョンでは、DataGridCell コントロールはスクリーン リーダーによって "カスタム" として読み上げられました。 .NET Framework 4.7.1 以降では、データ グリッド セル (ローカライズされます) として正しく読み上げられます。

  • .NET Framework 4.7.1 以降、スクリーン リーダーによって編集可能な ComboBox の名前が読み上げられます。

  • .NET Framework 4.7 以前のバージョンの場合、PasswordBox コントロールが "ビューに項目がありません" として読み上げられたか、他の誤動作が発生しました。 この問題は .NET Framework 4.7.1 以降で修正されています。

UIAutomation LiveRegion サポート

ナレーターなどのスクリーン リーダーはアプリケーションの UI コンテンツをユーザーのために読み上げます。通常、フォーカスを合わせた UI コンテンツのテキストが読み上げられます。 ただし、UI 要素が変わり、フォーカスがなくなったとき、ユーザーに通知されず、重要な情報を逃すことがあります。 ライブ領域は、この問題の解決を目指しています。 開発者はこれを利用し、UI 要素が大幅に変更されたことをスクリーン リーダーやその他の UIAutomation クライアントに指示できます。 指示後、スクリーン リーダーでは、その変更をユーザーに通知する方法とタイミングが決定されます。

ライブ領域をサポートするために、次の API が WPF に追加されました。

関心のある要素で AutomationProperties.LiveSetting プロパティを作成できます。次の例をご覧ください。

<TextBlock Name="myTextBlock" AutomationProperties.LiveSetting="Assertive">announcement</TextBlock>

ライブ領域のデータが変化し、スクリーン リーダーに通知する必要があれば、次のサンプルのように、明示的にイベントを発生させます。

var peer = FrameworkElementAutomationPeer.FromElement(myTextBlock);

peer.RaiseAutomationEvent(AutomationEvents.LiveRegionChanged);
Dim peer = FrameworkElementAutomationPeer.FromElement(myTextBlock)
peer.RaiseAutomationEvent(AutomationEvents.LiveRegionChanged)

ハイ コントラスト

.NET Framework 4.7.1 以降、さまざまな WPF コントロールでハイ コントラストが強化されました。 HighContrast テーマが設定されているときにこれを確認できます。 次の設定があります。

  • Expander コントロール

    フォーカスを合わせたとき、Expander コントロールが見やすくなりました。 ComboBoxListBoxRadioButton コントロールのキーボードも見やすくなりました。 次に例を示します。

    前:

    展開コントロールのスクリーンショット。フォーカスありとフォーカスなしのビジュアル。

    次の処理の後

    展開コントロールのスクリーンショット。コントロールのテキストが点線で囲まれています。

  • CheckBox コントロールと RadioButton コントロール

    CheckBox コントロールと RadioButton コントロールのテキストは、ハイ コントラスト テーマで選択されているとき、見やすくなりました。 次に例を示します。

    前:

    ラジオ ボタンとチェック ボタンのスクリーンショット。ハイ コントラストのテーマでテキストが読みにくくなっています。

    次の処理の後

    ラジオ ボタンとチェック ボタンのスクリーンショット。ハイ コントラストのテーマでテキストが読みやすくなっています。

  • ComboBox コントロール

    .NET Framework 4.7.1 以降、無効にした ComboBox コントロールの枠線が無効にしたテキストと同じ色になります。 次に例を示します。

    前:

    無効になっている ComboBox のスクリーンショット。さまざまな色の罫線とコントロール テキスト。

    次の処理の後

    無効になっている ComboBox のスクリーンショット。罫線とコントロール テキストが同じ色です。

    また、無効にしているボタンにフォーカスを合わせたとき、正しいテーマ色が使用されます。

    前:

    黒色ボタンのスクリーンショット。

    次の処理の後

    青色ボタンのスクリーンショット。

    最後になりますが、.NET Framework 4.7 以前のバージョンでは、ComboBox コントロールのスタイルを Toolbar.ComboBoxStyleKey に設定すると、ドロップダウンの矢印が見えなくなりました。 この問題は .NET Framework 4.7.1 以降で修正されています。 次に例を示します。

    前:

    ComboBox コントロールのスクリーンショット。ドロップダウンの矢印が見えません。

    次の処理の後

    ComboBox コントロールのスクリーンショット。ドロップダウンの矢印が見えます。

  • DataGrid コントロール

    .NET Framework 4.7.1 以降、DataGrid コントロールの並べ替えインジケーターで正しいテーマ色が使われるようになりました。 次に例を示します。

    前:

    並べ替えインジケーター矢印のスクリーンショット (機能改善前)

    次の処理の後

    並べ替えインジケーター矢印のスクリーンショット (機能改善後)

    また、.NET Framework 4.7 以前のバージョンでは、ハイ コントラスト モードでカーソルを合わせたとき、既定のリンク スタイルが正しくない色に変化しました。 これは .NET Framework 4.7.1 以降で修正されています。 同様に、.NET Framework 4.7.1 以降、DataGrid チェックボックス列でキーボード フォーカス フィードバックに既定の色が使用されます。

    次の処理の前

    次の処理の後

.NET Framework 4.7.1 での WPF アクセシビリティ機能改善の詳細については、「WPF でのアクセシビリティの向上」を参照してください。

Windows フォームのアクセシビリティ機能改善

.NET Framework 4.7.1 では、Windows フォーム (WinForms) のアクセシビリティが次の領域で変更されました。

ハイ コントラスト モードの表示が改善されました

.NET Framework 4.7.1 以降では、オペレーティング システムで利用できるハイ コントラスト モードを選択したとき、さまざまな WinForms コントロールの表示が改善されました。 Windows 10 では、ハイ コントラストのシステム色の一部で値が変わりました。Windows フォームは Windows 10 Win32 フレームワークに基づきます。 最も快適に利用するためには、最新版の Windows で実行し、テスト アプリケーションに app.manifest ファイルを追加して最新の OS 変更を選択し、次の画像のように Windows 10 対応 OS 行のコメントを解除します。

<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />

ハイ コントラストの変更例:

  • MenuStrip 項目のチェックマークが見やすくなりました。

  • 選択したとき、無効になっている MenuStrip 項目が見やすくなりました。

  • 選択した Button コントロールのテキストが背景色に対して際立ち、見やすくなりました。

  • 無効になっているテキストが読みやすくなりました。 次に例を示します。

    前:

    ハイ コントラスト モードでさまざまなコントロールを使用するアプリのスクリーンショット (アクセシビリティ前)。

    次の処理の後

    ハイ コントラスト モードでさまざまなコントロールを使用するアプリのスクリーンショット (アクセシビリティ後)。

  • スレッド例外ダイアログのハイ コントラストが改善されました。

ナレーター サポートが改善されました

.NET Framework 4.7.1 の Windows フォームでは、ナレーターのアクセシビリティが次の面で改善されました。

  • MonthCalendar コントロールに、他の UI 自動化ツールと同様に、ナレーターからアクセスできます。

  • CheckedListBox コントロールは、項目のチェック状態が変わったとき、ナレーターに通知します。その結果、リスト アイテムの値を変えたことがユーザーに通知されます。

  • DataGridViewCell コントロールは正しい読み取り専用状態をナレーターに報告します。

  • ナレーターが無効になっている ToolStripMenuItem テキストを読み上げるようになりました。以前は、無効になっているメニュー項目はスキップされました。

UIAutomation アクセシビリティ パターンのサポートが強化されました

.NET Framework 4.7.1 以降、アクセシビリティ技術ツールの開発者は、一部の WinForms コントロールについて、API アクセシビリティの共通のパターンとプロパティを活用できます。 アクセシビリティ機能改善の例:

プロパティ ブラウザーが使いやすくなりました

.NET Framework 4.7.1 以降、Windows フォームは次の点で改善されました。

  • さまざまなドロップダウン選択ウィンドウを利用することでキーボード操作が便利になりました。
  • 不要なタブ ストップが減りました。
  • コントロールの種類の報告機能が改善されました。
  • ナレーターの動作が改善されました。

ASP.NET Web コントロール

.NET Framework 4.7.1 および Visual Studio 2017 バージョン 15.3 以降では、ASP.NET によって、ASP.NET Web コントロールによる Visual Studio のアクセシビリティ テクノロジの処理方法が向上しています。 主な変更点は以下のとおりです。

  • [詳細の表示] ウィザードの [フィールドの追加] ダイアログや ListView ウィザードの [ListView の構成] ダイアログなど、コントロールで不足していた UI アクセシビリティ パターンを実装するための変更。

  • データ ページャー フィールド エディターなど、ハイ コントラスト モードでの表示を改善するための変更。

  • DataPager コントロールの [ページャーのフィールドを編集] ウィザードの [フィールド] ダイアログ、 [ObjectContext の構成] ダイアログ、 [データ ソースの構成] ウィザードの [データの選択の構成] ダイアログなど、キーボードの操作性を改善するための変更。

.NET SDK Tools

構成エディター ツール (SvcConfigEditor.exe) およびサービス トレース ビューアー ツール (SvcTraceViewer.exe) が、さまざまなアクセシビリティの問題を修正して改善されています。 その問題のほとんどは、名前の未定義や、特定の UI の自動化パターンが正しく実装されていないといった軽微なものです。 このような問題は、多くのユーザーが認識しないものですが、スクリーン リーダーのような支援技術を使用するお客様はこれらの SDK ツールのアクセシビリティの強化を実感されるでしょう。

これらの機能強化により、キーボード フォーカスの順序など、以前のいくつかの動作が変更されます。

Windows Workflow Foundation (WF) ワークフロー デザイナー

ワークフロー デザイナーでのアクセシビリティに関する変更は次のとおりです。

  • 一部のコントロールで、タブ オーダーが左から右、上から下に変更されます。

  • キーボードで利用できる機能が増えます:

    • アクティビティのプロパティを編集する際、プロパティ グループに初めてフォーカスを設定したときに、プロパティ グループをキーボードで折りたたむことができます。

    • 警告アイコンにキーボードでアクセスできます。

    • [プロパティ] ウィンドウの [その他のプロパティ] ボタンに、キーボードでアクセスできます。

    • キーボードを使って、ワークフロー デザイナーの [引数] および [変数] ウィンドウのヘッダー項目にアクセスできます。

  • 次のような場合に、フォーカスのある項目の可視性が向上しました:

    • ワークフロー デザイナーおよびアクティビティ デザイナーで使われているデータ グリッドへの行の追加。

    • ReceiveReply および SendReply アクティビティ内のフィールド間の Tab 移動。

    • 変数または引数の既定値の設定

  • スクリーン リーダーが正しく認識できるようになりました:

    • ワークフロー デザイナーで設定されたブレークポイント。

    • FlowSwitch<T>FlowDecisionCorrelationScope アクティビティ。

    • Receive アクティビティの内容。

    • InvokeMethod アクティビティのターゲットの種類。

    • TryCatch アクティビティの [例外] コンボ ボックスと [Finally] セクション。

    • メッセージング アクティビティの [メッセージの種類] コンボ ボックス、[関連付け初期化子の追加] ウィンドウのスプリッター、[コンテンツ定義] ウィンドウで、および [CorrelatesOn の定義] ウィンドウ (ReceiveSendSendReply、および ReceiveReply)。

    • ステート マシンの遷移と遷移先。

    • FlowDecision アクティビティの注釈とコネクタ。

    • アクティビティのコンテキスト (右クリック) メニュー。

    • プロパティ グリッドの、プロパティ値エディター、[検索のクリア] ボタン、[カテゴリ別] および [アルファベット順] の並べ替えボタン、[式エディター] ダイアログ。

    • ワークフロー デザイナーのズーム パーセンテージ。

    • Parallel および Pick アクティビティの区切り記号。

    • InvokeDelegate アクティビティ。

    • ディクショナリ アクティビティの [型の選択] ウィンドウ (Microsoft.Activities.AddToDictionary<TKey,TValue>Microsoft.Activities.RemoveFromDictionary<TKey,TValue> など)。

    • [.NET 型の参照と選択] ウィンドウ。

    • ワークフロー デザイナーでの階層リンク。

  • ハイ コントラスト テーマを選ぶと、要素間のコントラスト比の向上や、フォーカス要素に使われる選択ボックスの認識性の向上など、ワークフロー デザイナーとそのコントロールの表示について多くの点が向上していることがわかります。

関連項目