Улучшения специальных возможностей в .NET Framework

Платформа .NET Framework ориентирована на то, чтобы сделать приложения более доступными для ваших пользователей. Специальные возможности позволяют приложению предоставлять соответствующую функциональность пользователям технологий с поддержкой специальных возможностей. Начиная с .NET Framework 4.7.1 платформа .NET Framework включает большое число улучшений специальных возможностей, позволяющих разработчикам создавать доступные приложения.

Переключатель специальных возможностей

Вы можете включить в приложении функции специальных возможностей, если оно предназначено для .NET Framework 4.7 или более ранней версии, но выполняется на платформе .NET Framework 4.7.1 или более поздней версии. Вы также можете настроить в приложении использование компонентов прежних версий (и не использовать преимущества функций специальных возможностей), если оно предназначено для .NET Framework 4.7.1 или более поздней версии. У каждой версии платформы .NET Framework с функциями специальных возможностей есть специальный переключатель, который можно добавить в элемент <AppContextSwitchOverrides> в разделе <runtime> файла конфигурации приложения. Ниже приведены поддерживаемые переключатели:

Версия Switch
.NET Framework 4.7.1 "Switch.UseLegacyAccessibilityFeatures"
.NET Framework 4.7.2. "Switch.UseLegacyAccessibilityFeatures.2"
.NET Framework 4.8 "Switch.UseLegacyAccessibilityFeatures.3"
Накопительный пакет обновления KB4569746 для платформы .NET Framework 4.8 от 11 августа 2020 г. "Switch.UseLegacyAccessibilityFeatures.4"
платформа .NET Framework 4.8.1 Switch.UseLegacyAccessibilityFeatures.5"

Использование преимуществ усовершенствованных специальных возможностей

Новые специальные возможности включены по умолчанию для приложений, предназначенных для .NET Framework 4.7.1 или более поздней версии. Кроме того, приложения, которые предназначены для более ранней версии .NET Framework, но работают на платформе .NET Framework 4.7.1 или более поздней версии, могут явно отказаться от устаревших вариантов специальных возможностей (и тем самым согласиться на использование улучшений специальных возможностей). Для этого добавьте параметры в элемент <AppContextSwitchOverrides> в разделе <runtime> файла конфигурации приложения и установите для них значение 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 г. для .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>

Восстановление поведения из предыдущих версий

Для приложений, ориентированных на версии .NET Framework, начиная с 4.7.1, можно отключить функции специальных возможностей, добавив следующий параметр в элемент <AppContextSwitchOverrides> в разделе <runtime> файла конфигурации приложения и установив значение 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 Forms

Добавлены и улучшены представления UIA

До платформа .NET Framework 4.8.1 Windows Forms не поддерживает ряд шаблонов UIA для поддержки вспомогательных технологий для взаимодействия с приложениями. Этот недостаток может привести к тому, что экранный диктор или другие средства чтения с экрана сообщают о неполной или неправильной информации. Это также может повлиять на важные функциональные возможности, такие как перемещение курсора через текст в элементе TextBox управления. С платформа .NET Framework 4.8.1 реализованы все необходимые шаблоны для общих элементов управления. Эта новая функциональность предоставляет пользователям вспомогательных технологий гораздо более широкий интерфейс взаимодействия с приложением.

  • Добавлена поддержка шаблона развертывания и свершения UIA в DateTimePicker элемент управления.
  • Добавлена поддержка UIA в MonthCalendar элемент управления. Теперь вспомогательные технологии, такие как экранный диктор, могут перемещаться по отдельным датам в элементе управления.
  • Реализована поддержка шаблона текста для всех текстовых элементов управления, включая TextBoxэлементы управления, MaskedTextBoxредактирование, ToolStripTextBoxDataGridViewTextBoxCellи DomainUpDown элементы управления. PropertyGrid
  • ToolTipтеперь следует рекомендациям WCAG2.1, которые должны быть постоянными, уволенными и наведенными на Windows 11. Изменения в поведении подсказки ограничены системами Windows 11 с установленными платформа .NET Framework 4.8.1 и применяются только к приложениям, в которых время ожидания не задано для подсказки. Подсказки, которые сохраняются, можно закрыть с помощью клавиши ESC или клавиши CTRL или перехода к элементу управления с помощью другого набора подсказки.

Различные исправления ошибок для существующих функций специальных возможностей

  • Экранный диктор теперь может сосредоточиться на пустом DataGridView элементе управления.
  • Устранена проблема, из-за которая приводила к подсчету скрытых столбцов при объявлении счетчика столбцов в элементе DataGridView управления.
  • Устранена проблема, из-за которой параметры шрифта, заданные в DataGridviewCellStyle базовой форме, имели Font свойство, отличающееся DataGridView от DefaultFontсвойства.
  • AccessibleName Обновлено свойство внутренних полос прокрутки DataGridView элемента управления, чтобы удалить текст ScrollBar.
  • Исправлен цвет выбранной DataGridViewLinkCell ячейки.
  • Исправлена проблема с пользовательскими DataGridView элементами управления, в которых не ControlType было или LocalizedControlType указано для пользовательских DataGridViewCell элементов.
  • Обновлено соотношение светимости до 3.5:1 для ToolStripButton элементов управления, для которых задано ToolStripRenderMode значение System.
  • Улучшенная навигация по клавиатуре в ToolStrip случае, когда элемент является типом ToolStripComboBox .
  • Обновлен цвет фона ToolStripButton режима высокой контрастности.
  • Убедитесь, что для вспомогательной технологии ToolStripSeparatorсообщается ограничивающий прямоугольник.
  • Исправлена проблема, из-за которой средство чтения с экрана JAWS завершает работу при чтении PropertyGrid элемента управления.
  • Убедитесь, что дерево иерархии UIA для PropertyGrid элемента управления обновляется при развертывании сложной записи Font . Также убедитесь, что дерево обновляется правильно, когда запись затем свернута и больше не отображается.
  • PropertyGrid Теперь категории имеют локализованный тип PropertyGrid categoryэлемента управления.
  • Исправлена проблема с ComboBox тем, что может привести к сбою приложения в Аналитика специальных возможностей для Windows.
  • Обновлен цвет границы для того, чтобы Button иметь больше контрастности в цветах по умолчанию.
  • Включенные вспомогательные технологические средства для доступа к ControlBox кнопкам развернутой дочерней формы MDI.
  • Свойство AccessibleNameDomainUpDown элемента управления имеет новое значение по умолчанию пустой строки. Пустая строка будет поощрять разработчиков создавать понятное имя, а не принимать предыдущее непустое значение по умолчанию.
  • AccessibleName Обновлено свойство кнопки "Печать" в PrintPreviewDialog элементе "Кнопка печати" на "Печать", чтобы избежать избыточности, когда средства чтения с экрана объявляют элемент управления и его тип.
  • Обновлены элементы управления списком UIA, чтобы удалить пустой элемент списка, когда PropertyGrid ячейка типа ComboBox закрыта и больше не отображается.

Windows Presentation Foundation (WPF)

Улучшения обработки подсказки со специальными возможностями

В этом выпуске WPF улучшил интерфейс, гарантируя, что подсказка в текущем окне можно легко закрыть с помощью клавиши ESC, клавиши CTRL (само по себе) или сочетания CTRL+SHIFT+F10. В этом выпуске область ключа ESC было сокращено, чтобы применить только к текущему окну, когда ранее он применялся к любой открытой подсказке в приложении. По умолчанию подсказки WPF будут соответствовать рекомендациям WCAG2.1, чтобы быть постоянными, закрываемыми и наведенными на указатель.

Новое в специальных возможностях в накопительном обновлении от 11 августа 2020 г. для платформы .NET Framework 4.8

Накопительное обновление KB4569746 для платформы .NET Framework 4.8 от 11 августа 2020 г. содержит новые специальные возможности Windows Forms.

  • Устранены проблемы с объявлением элементов управления PropertyGrid и развернутого или свернутого состояния категории средствами чтения с экрана.

  • Обновлены доступные шаблоны элемента управления PropertyGrid и его внутренних элементов.

  • Обновлены доступные имена внутренних элементов управления PropertyGrid для их правильного объявления средствами чтения с экрана.

  • Устранены доступные свойства ограничивающего прямоугольника для элементов управления PropertyGridView.

  • Обеспечение правильного объявления средствами чтения с экрана развернутого или свернутого состояния ячеек поля со списком DataGridView.

Улучшения специальных возможностей в .NET Framework 4.8

Платформа .NET Framework 4.8 включает новые функции специальных возможностей в следующих областях:

Windows Forms

В .NET Framework 4.8 ко многим часто используемым элементам управления Windows Forms добавлена поддержка динамических областей и событий уведомлений. Кроме того, добавлена поддержка подсказок при переходе к элементам управления с помощью клавиатуры.

Поддержка динамических областей для элементов управления типа Label и StatusStrip в модели автоматизации пользовательского интерфейса Microsoft Windows

Динамические области в модели автоматизации пользовательского интерфейса Microsoft Windows позволяют разработчикам приложений уведомлять средства чтения с экрана об изменении текста в элементах управления, который находятся не там, где пользователь работает в настоящее время. Например, это полезно в случае с элементом управления StatusStrip, в котором отображается состояние подключения. Разработчику может быть необходимо уведомить средство чтения с экрана об изменении состояния, например утере подключения.

Начиная с .NET Framework 4.8 динамические области в модели автоматизации пользовательского интерфейса Microsoft Windows реализованы для элементов управления Windows Forms Label и StatusStrip. Например, в следующем коде динамическая область используется в элементе управления Label с именем label1:

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

…
Label1.Text = "Ready!";

Экранный диктор произносит "Готово" независимо от того, с каким элементом в приложении взаимодействует пользователь.

Вы также можете реализовать UserControl как динамическую область:

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);
      }
   }
}

События уведомлений в модели автоматизации пользовательского интерфейса Microsoft Windows

Событие уведомления модели автоматизации пользовательского интерфейса Microsoft Windows, появившееся в Windows 10 Fall Creators Update, позволяет приложению создавать событие модели автоматизации пользовательского интерфейса, вследствие которого экранный диктор произносит текст, предоставленный с событием, причем соответствующий элемент управления в пользовательском интерфейсе не требуется. В некоторых случаях это очень простой способ радикально улучшить доступность приложения. Он также может быть полезен для уведомления о ходе выполнения длительного процесса. Дополнительные сведения о событиях уведомлений в модели автоматизации пользовательского интерфейса Microsoft Windows см. в записи блога Can your desktop app leverage the new UI Notification event? (Может ли ваше классическое приложение использовать новое событие уведомления пользовательского интерфейса?).

В следующем примере создается событие уведомления:

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 и более ранних версий подсказка элемента управления всплывает только при наведении на элемент указателя мыши. Начиная с .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>

На изображении ниже показана подсказка, появляющаяся, когда пользователь выбирает кнопку с помощью клавиатуры.

Screenshot of tooltip when user navigates to button with the keyboard.

Windows Presentation Foundation (WPF)

Начиная с .NET Framework 4.8 в WPF внесен ряд улучшений специальных возможностей.

Экранные дикторы больше не объявляют элементы с состоянием видимости Collapsed или Hidden

Свернутые или скрытые элементы больше не объявляются средством чтения с экрана. Если элементы, свойство Visibility которых имеет значение Visibility.Collapsed или Visibility.Hidden, объявляются средством чтения с экрана, пользователь может получать неправильное представление о пользовательском интерфейсе. Начиная с .NET Framework 4.8 в WPF свернутые или скрытые элементы больше не включаются в представление элементов управления дерева UIAutomation, поэтому средства чтения с экрана больше не могут объявлять их.

Свойство SelectionTextBrush для выделения текста без использования декоративного элемента

В .NET Framework 4.7.2 в WPF появилась возможность отрисовывать выделение текста в TextBox и PasswordBox без использования слоя декоративных элементов. В таком случае цвет переднего плана выделенного текста определялся свойством SystemColors.HighlightTextBrush.

В .NET Framework 4.8 добавлено новое свойство SelectionTextBrush, которое позволяет разработчикам выбирать кисть для текста, выделенного без использования декоративного элемента. Это свойство работает только для элементов управления, производных от TextBoxBase, и элемента управления PasswordBox в приложениях WPF с включенным выделением текста без использования декоративного элемента. Оно не поддерживается элементом управления RichTextBox. Если выделение текста без использования декоративного элемента не включено, это свойство игнорируется.

Чтобы использовать это свойство, просто добавьте его в код XAML и примените соответствующую кисть или привязку. В итоге выделенный текст выглядит так:

Screenshot of the app running with the words Hello World selected.

Свойства SelectionBrush и SelectionTextBrush можно использовать вместе, чтобы получить любую требуемую комбинацию цветов фона и переднего плана.

Поддержка свойства ControllerFor в модели автоматизации пользовательского интерфейса Microsoft Windows

Свойство ControllerFor в модели автоматизации пользовательского интерфейса Microsoft Windows возвращает массив элементов автоматизации, которые управляются элементом автоматизации, поддерживающим это свойство. Это свойство обычно используется для специальной возможности автозаполнения. Свойство ControllerFor применяется, когда элемент автоматизации влияет на одну или несколько частей пользовательского интерфейса приложения или рабочего стола. В противном случае влияние работы элемента управления сложно связать с элементами пользовательского интерфейса. Эта возможность позволяет элементам управления предоставлять значение для свойства ControllerFor.

В .NET Framework 4.8 появился новый виртуальный метод GetControlledPeersCore(). Чтобы предоставить значение для свойства ControllerFor, просто переопределите этот метод так, чтобы он возвращал List<AutomationPeer> для элементов управления, которыми управляет данный объект 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 или согласиться на ее использование с помощью параметров AppContextSwitch.UseLegacyAccessibilityFeatures.3 и Switch.UseLegacyToolTipDisplay. Вот пример файла конфигурации приложения:

<?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 не появляются при наведении фокуса с помощью клавиатуры. Они отображаются только при использовании сочетания клавиш.

Добавлена поддержка свойств SizeOfSet и PositionInSet в модели автоматизации пользовательского интерфейса Microsoft Windows

В Windows 10 появились два новых свойства модели автоматизации пользовательского интерфейса Microsoft Windows: SizeOfSet и PositionInSet. Они используются приложениями для указания количества элементов в наборе. Клиентские приложения модели автоматизации пользовательского интерфейса Microsoft Windows, такие как средства чтения с экрана, могут запрашивать эти свойства, чтобы точно представлять пользовательский интерфейс приложения.

Начиная с .NET Framework 4.8 приложения WPF предоставляют доступ к этим двум свойствам модели автоматизации пользовательского интерфейса Microsoft Windows. Это можно сделать двумя способами:

  • С помощью свойств зависимостей.

    В WPF добавлены два новых свойства зависимостей: AutomationProperties.SizeOfSet и AutomationProperties.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.

    GetPositionInSetCore() В GetSizeOfSetCore() класс были добавлены и виртуальные AutomationPeer методы. Разработчик может указывать значения для SizeOfSet и PositionInSet, переопределяя эти методы, как показано в следующем примере:

    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, можно задать параметр AppContextSwitch.UseLegacyAccessibilityFeatures.3, как показано в следующем файле App.config:

<?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 внесены указанные ниже изменения.

  • Улучшены метки case FlowSwitch при использовании экранного диктора.

  • Улучшены описания кнопок при использовании экранного диктора.

  • Пользователи, работающие с темами высокой контрастности, обратят внимание на улучшение видимости конструктора рабочих процессов и его элементов управления, в том числе повышение контрастности между элементами, а также более заметные поля выбора для элементов, находящихся в фокусе.

Если приложение предназначено для .NET Framework 4.7.2 или более ранней версии, эти улучшения можно активировать отдельно, установив параметр AppContextSwitch.UseLegacyAccessibilityFeatures.3 в значение false в файле конфигурации приложения. Дополнительные сведения см. в разделе Использование преимуществ усовершенствованных специальных возможностей этой статьи.

Улучшения специальных возможностей в .NET Framework 4.7.2

Платформа .NET Framework 4.7.2 включает новые функции специальных возможностей в следующих областях:

Windows Forms

Определенные в ОС цвета в темах высокой контрастности

Начиная с .NET Framework 4.7.2 Windows Forms использует цвета, определенные в операционной системе, в темах высокой контрастности. Это влияет на следующие элементы:

  • Стрелка раскрывающегося списка элемента управления ToolStripDropDownButton.

  • Элементы управления Button, RadioButton и CheckBox, у которых для параметра FlatStyle установлено значение FlatStyle.Flat или FlatStyle.Popup. Ранее выбранные цвета текста и фона не были контрастными и текст было сложно читать.

  • Элементы управления, содержащиеся в GroupBox, у которого для свойства Enabled установлено значение false.

  • Элементы управления ToolStripButton, ToolStripComboBox и ToolStripDropDownButton, которые имеют повышенное значение контрастности яркости в режиме высокой контрастности.

  • Свойство LinkColor класса DataGridViewLinkCell.

Усовершенствования экранного диктора

Начиная с .NET Framework 4.7.2 усовершенствована поддержка экранного диктора:

  • Он сообщает значение свойства ToolStripMenuItem.ShortcutKeys при объявлении текста ToolStripMenuItem.

  • Он указывает, когда для свойства Enabled элемента ToolStripMenuItem задано значение false.

  • Он предоставляет отзыв о состоянии флажка, если для свойства ListView.CheckBoxes задано значение true.

  • Порядок фокуса экранного диктора в режиме сканирования согласуется с визуальным порядком элементов управления в диалоговом окне загрузки ClickOnce.

Усовершенствования DataGridView

Начиная с .NET Framework 4.7.2 элемент управления DataGridView вносит следующие улучшения специальных возможностей:

  • Строки можно сортировать с помощью клавиатуры. Пользователь может использовать ключ F3 для сортировки по текущему столбцу.

  • Ширина столбца текущей ячейки может быть увеличена или уменьшена с помощью клавиш ALT ВЛЕВО или СТРЕЛКА ВПРАВО + .

  • Когда DataGridView.SelectionMode имеет значение DataGridViewSelectionMode.FullRowSelect, заголовок столбца меняет цвет для указания на текущий столбец, когда пользователь переходит по ячейкам в текущей строке.

  • Свойство AccessibleObject.Parent объекта System.Windows.Forms.DataGridViewLinkCell.DataGridViewLinkCellAccessibleObject возвращает правильный родительский элемент управления.

Улучшенные визуальные подсказки

  • Элементы управления RadioButton и CheckBox с пустым свойством Text отображают индикатор фокуса при получении фокуса.

Улучшенная поддержка сетки свойств

  • Дочерние PropertyGrid элементы элемента элемента управления теперь возвращают true свойство IsReadOnlyProperty только в том случае, если включен элемент PropertyGrid.

  • Дочерние элементы элемента управления PropertyGrid возвращают false для свойства IsEnabledProperty только в том случае, если элемент PropertyGrid может быть изменен пользователем.

Улучшение навигации с помощью клавиатуры

  • Элемент управления ToolStripButton позволяет отображать фокус, если он содержится в ToolStripPanel, для свойства TabStop которого задано значение true

Windows Presentation Foundation (WPF)

Изменения элементов управления CheckBox и RadioButton

В .NET Framework 4.7.1 и более ранних версий элементы управления System.Windows.Controls.CheckBox и System.Windows.Controls.RadioButton WPF имеют несогласованные и (в классической теме и теме высокой контрастности) неправильные визуальные элементы фокуса. Это происходит в случаях, когда для элементов управления не задано какое-либо содержимое. Это может затруднять переход между темами и отображение визуального элемента фокуса.

В .NET Framework 4.7.2 эти визуальные элементы стали более согласованными в разных темах и более видимыми в классической и контрастной темах.

Элементы управления WinForms, размещенные в приложении WPF

При использовании элемента управления WinForms, размещенного в приложении WPF в .NET Framework 4.7.1 и более ранних версий, пользователи не могли выйти из слоя WinForms с помощью клавиши табуляции, если первый или последний элемент управления в слое был элементом управления ElementHost WPF. В .NET Framework 4.7.2 пользователи теперь могут выйти из слоя 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 эта проблема устранена.

Поддержка динамических областей автоматизации пользовательского интерфейса

Средства чтения с экрана, такие как экранный диктор, помогают людям читать содержимое пользовательского интерфейса приложения. Обычно для этого используется преобразование текста в речь для содержимого, находящегося в фокусе. Однако если элемент пользовательского интерфейса изменяется и находится не в фокусе, пользователь может не получить уведомление и пропустить важные сведения. Динамические области призваны решить эту проблему. Разработчик может использовать их для информирования средства чтения с экрана или любого другого клиента автоматизации пользовательского интерфейса о важных изменениях элемента пользовательского интерфейса. После этого средство чтения с экрана может решить, уведомлять ли пользователя об этом изменении.

Для поддержки динамических областей в WPF добавлены следующие API:

  • Поля AutomationElementIdentifiers.LiveSettingProperty и AutomationElementIdentifiers.LiveRegionChangedEvent, которые идентифицируют свойство LiveSetting и событие LiveRegionChanged. Их можно задать с помощью XAML.

  • Присоединенное свойство AutomationProperties.LiveSetting, уведомляющее средство чтения с экрана о том, насколько важно изменение пользовательского интерфейса для пользователя.

  • СвойствоAutomationProperties.LiveSettingProperty, которое идентифицирует присоединенное свойство AutomationProperties.LiveSetting.

  • Метод AutomationPeer.GetLiveSettingCore, который можно переопределить для предоставления значения LiveSetting.

  • Методы AutomationProperties.GetLiveSetting и AutomationProperties.SetLiveSetting, которые возвращают и задают значение LiveSetting.

  • Перечисление System.Windows.Automation.AutomationLiveSetting, которое определяет следующие возможные значения LiveSetting:

    • AutomationLiveSetting.Off. Элемент не отправляет уведомления при изменении содержимого динамической области.

    • AutomationLiveSetting.Polite. Элемент отправляет уведомления, не прерывающие работу, при изменении содержимого динамической области.

    • AutomationLiveSetting.Assertive. Элемент отправляет уведомления, прерывающие работу, при изменении содержимого динамической области.

Вы можете создать динамическую область, задав свойство 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 элемента управления отображается. Визуальные элементы клавиатуры для элементов управления ComboBox, ListBox и RadioButton также видимы. Например:

    До:

    Screenshot of the expander control with focus and no focus visual.

    После:

    Screenshot of the expander control with focus showing a dotted line around the control's text.

  • Элементы управления CheckBox и RadioButton

    Текст в элементах управления CheckBox и RadioButton теперь стало проще читать, когда он выбран при использовании тем с высокой контрастностью. Например:

    До:

    Screenshot of radio and check buttons with poor text visibility on high contrast themes.

    После:

    Screenshot of radio and check buttons with better text visibility on high contrast themes.

  • Элемент управления ComboBox

    Начиная с .NET Framework 4.7.1 граница отключенного элемента управления ComboBox имеет цвет отключенного текста. Например:

    До:

    Screenshot of a disabled ComboBox with border and control text in different colors.

    После:

    Screenshot of a disabled ComboBox with border the same color as the control text.

    Кроме того, отключенные и находящиеся в фокусе кнопки используют правильный цвет темы.

    До:

    Screenshot of a black button with gray text saying Focus Me.

    После:

    Screenshot of a blue button with black text saying Focus Me.

    Наконец, в .NET Framework 4.7 и более ранних версий установка стиля элемента управления ComboBox в значение Toolbar.ComboBoxStyleKey приводила к тому, что стрелка раскрывающегося списка была невидимой. Начиная с .NET Framework 4.7.1 эта проблема устранена. Например:

    До:

    Screenshot of a ComboBox control with an invisible drop-down arrow.

    После:

    Screenshot of a ComBoxBox control displaying the drop-down arrow.

  • Элемент управления DataGrid

    Начиная с .NET Framework 4.7.1 стрелка индикатора сортировки в элементе управления DataGrid имеет правильные цвета темы. Например:

    До:

    Screenshot of sort indicator arrow before improvements.

    После:

    Screenshot of sort indicator arrow after improvements.

    Кроме того, в .NET Framework 4.7 и более ранних версий стиль ссылки по умолчанию изменялся на неправильный цвет при наведении указателя мыши в режимах высокой контрастности. Начиная с .NET Framework 4.7.1 эта проблема устранена. DataGrid Аналогичным образом столбцы проверка box используют ожидаемые цвета для обратной связи с фокусом клавиатуры, начиная с платформа .NET Framework 4.7.1.

    До:

    Screenshot of a link saying Click Me! in red.

    После:

    Screenshot of a link saying Click Me! in yellow.

Дополнительные сведения об улучшениях специальных возможностей WPF в .NET Framework 4.7.1 см. в разделе Улучшения специальных возможностей в WPF.

Улучшения специальных возможностей в Windows Forms

В модель Windows Forms (WinForms) платформы .NET Framework 4.7.1 были внесены изменения специальных возможностей в следующих областях:

Улучшенное отображение в режиме высокой контрастности

Начиная с .NET Framework 4.7.1 различные элементы управления WinForms обеспечивают улучшенную отрисовку в режимах высокой контрастности, доступных в операционной системе. В Windows 10 были изменены некоторые системные цвета в режиме высокой контрастности, а Windows Forms основан на платформе Win32 Windows 10. Для лучшего использования запустите последнюю версию Windows и включите последние изменения ОС, добавив файл app.manifest в тестовое приложение и раскомментируйте поддерживаемую строку ОС Windows 10, чтобы она выглядела следующим образом:

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

Некоторые примеры изменения режима высокой контрастности:

  • Лучше читаются флажки в элементах MenuStrip.

  • Лучше читаются выбранные отключенные элементы MenuStrip.

  • Текст в выбранном Button элементе управления отличается от цвета выбора.

  • Отключенный текст проще читать. Например:

    До:

    Screenshot of an app that uses different controls running in high contrast mode before accessibility improvements.

    После:

    Screenshot of an app that uses different controls running in high contrast mode after accessibility improvements.

  • Усовершенствования режима высокой контрастности в диалоговом окне исключения потока.

Улучшенная поддержка экранного диктора

Модель Windows Forms в .NET Framework 4.7.1 содержит следующие улучшения специальных возможностей для экранного диктора:

  • К элементу управления MonthCalendar может обратиться как экранный диктор, так и любое другое средство автоматизации пользовательского интерфейса.

  • Элемент управления CheckedListBox оповещает экранный диктор об изменении состояния флажка элемента, чтобы пользователь узнал, что значение элемента списка изменилось.

  • Элемент управления DataGridViewCell сообщает правильное состояние доступа только для чтения экранному диктору.

  • Теперь экранный диктор может прочитать отключенный текст ToolStripMenuItem, хотя раньше он пропускал отключенные пункты меню.

Улучшенная поддержка шаблонов специальных возможностей автоматизации пользовательского интерфейса

Начиная с .NET Framework 4.7.1 разработчики средств специальных возможностей могут использовать стандартные шаблоны специальных возможностей API и свойства для нескольких элементов управления WinForms. Некоторые из этих улучшений специальных возможностей:

Улучшенное взаимодействие с обозревателем свойств

Начиная с .NET Framework 4.7.1 модель Windows Forms включает в себя следующее:

  • Улучшенная навигация с помощью клавиатуры посредством различных окон выбора с раскрывающимися списками.
  • Сокращение ненужных позиций табуляции.
  • Улучшенные отчеты о типах элементов управления.
  • Улучшенная работа экранного диктора.

Веб-элементы управления ASP.NET

Начиная с .NET Framework 4.7.1 и Visual Studio 2017 версии 15.3 в ASP.NET улучшена работа веб-элементов управления ASP.NET с технологией специальных возможностей в Visual Studio. Внесены следующие изменения:

  • Изменения для реализации отсутствующих шаблонов специальных возможностей пользовательского интерфейса в элементах управления, например в диалоговом окне Добавить поле в мастере представления сведений или в диалоговом окне Настройка ListView в мастере ListView.

  • Изменения для улучшенного отображения в режиме высокой контрастности, например в редакторе полей страничного навигатора данных.

  • Изменения для улучшения навигации с помощью клавиатуры для таких элементов, как диалоговое окно Поля в мастере полей страничного навигатора, диалоговое окно Настроить ObjectContext или Настроить выбор данных в мастере настройки источника данных.

.NET SDK Tools

В редакторе конфигурации (SvcConfigEditor.exe) и средстве Service Trace Viewer (SvcTraceViewer.exe) были устранены различные ошибки специальных возможностей. В основном это были незначительные проблемы, например не определялось имя или некорректно реализовывались шаблоны автоматизации пользовательского интерфейса. Многие пользователи могли не замечать неверные значения, но пользователям, использующим вспомогательные технологии, такие как средства чтения с экрана, будет проще использовать эти средства пакета SDK.

Эти усовершенствования меняют предыдущее поведение, например порядок фокуса клавиатуры.

Конструктор рабочих процессов Windows Workflow Foundation (WF)

Ниже перечислены изменения специальных возможностей в конструкторе рабочих процессов:

  • Для некоторых элементов управления изменена последовательность табуляции при переходе слева направо и сверху вниз:

    • Окно инициализации корреляции для установки данных корреляции для действия InitializeCorrelation.

    • Окно определения содержания для действий Receive, Send, SendReply и ReceiveReply.

  • Большее число функций доступно с клавиатуры:

    • При редактировании свойств действия группы свойств можно сворачивать с помощью клавиатуры в том случае, если они впервые получают фокус.

    • Значки предупреждений теперь доступны с клавиатуры.

    • Кнопка Дополнительные свойства в окне Свойства теперь доступна с клавиатуры.

    • Пользователи могут с помощью клавиатуры получать доступ к элементам заголовка в областях Аргументы и Переменные в конструкторе рабочих процессов.

  • Улучшена видимость находящихся в фокусе элементов, например в следующих случаях:

    • Добавление строк в сетки данных, используемые конструктором рабочих процессов и конструкторами действий.

    • Переход по клавише TAB между полями в действиях ReceiveReply и SendReply.

    • Установка значений по умолчанию для переменных или аргументов

  • Средства чтения с экрана теперь правильно распознают следующие объекты:

    • Точки останова, установленные в конструкторе рабочих процессов.

    • Действия FlowSwitch<T>, FlowDecision и CorrelationScope.

    • Содержимое действия Receive.

    • Целевой тип действия InvokeMethod.

    • Поле со списком "Исключение" и раздел Finally действия TryCatch.

    • Поле со списком "Тип сообщений", разделитель в окне "Добавить инициализаторы корреляции", окно "Определение содержимого", а также окно "Определение корреляции" в действиях сообщений (Receive, Send, SendReply и ReceiveReply).

    • Переходы и назначения переходов конечного автомата.

    • Заметки и соединители для действий FlowDecision.

    • Контекстные меню действий, вызываемые при щелчке правой кнопкой мыши.

    • Редакторы значений свойств, кнопка "Очистить условия поиска", кнопки сортировки "По категории" и "По алфавиту", а также диалоговое окно "Редактор выражений" в сетке свойств.

    • Величина масштаба в конструкторе рабочих процессов.

    • Разделитель в действиях Parallel и Pick.

    • Действие InvokeDelegate.

    • Окно "Выбор типов" для действий словаря (Microsoft.Activities.AddToDictionary<TKey,TValue>, Microsoft.Activities.RemoveFromDictionary<TKey,TValue> и т. д.).

    • Окно поиска и выбора типа .NET.

    • Элемент иерархической навигации в конструкторе рабочих процессов.

  • Пользователи, работающие с темами высокой контрастности, обратят внимание на улучшение видимости многих частей конструктора рабочих процессов и его элементов управления, в том числе повышение контрастности между элементами, а также более заметные поля выбора для элементов, находящихся в фокусе.

См. также