Co nowego w ułatwieniach dostępu w programie .NET Framework
Program .NET Framework ma na celu zwiększenie dostępności aplikacji dla użytkowników. Funkcje ułatwień dostępu umożliwiają aplikacji zapewnienie odpowiedniego środowiska dla użytkowników technologii asystacyjnych. Począwszy od programu .NET Framework 4.7.1, program .NET Framework zawiera dużą liczbę ulepszeń ułatwień dostępu, które umożliwiają deweloperom tworzenie dostępnych aplikacji.
Przełączniki ułatwień dostępu
Możesz skonfigurować aplikację tak, aby zdecydowała się na funkcje ułatwień dostępu, jeśli jest przeznaczona dla programu .NET Framework 4.7 lub starszej wersji, ale jest uruchomiona w programie .NET Framework 4.7.1 lub nowszym. Możesz również skonfigurować aplikację tak, aby korzystała ze starszych funkcji (i nie korzysta z funkcji ułatwień dostępu), jeśli jest przeznaczona dla programu .NET Framework 4.7.1 lub nowszego. Każda wersja programu .NET Framework zawierająca funkcje ułatwień dostępu ma przełącznik ułatwień dostępu specyficzny dla wersji, który można dodać do <AppContextSwitchOverrides>
elementu w <runtime>
sekcji pliku konfiguracji aplikacji. Poniżej przedstawiono obsługiwane przełączniki:
Wersja | Switch |
---|---|
.NET Framework 4.7.1 | "Switch.UseLegacyAccessibilityFeatures" |
.NET Framework 4.7.2 | "Switch.UseLegacyAccessibilityFeatures.2" |
.NET Framework 4.8 | "Switch.UseLegacyAccessibilityFeatures.3" |
11 sierpnia 2020 r. zbiorcza aktualizacja KB4569746 programu .NET Framework 4.8 | "Switch.UseLegacyAccessibilityFeatures.4" |
.NET Framework 4.8.1 | "Switch.UseLegacyAccessibilityFeatures.5" |
Korzystanie z ulepszeń ułatwień dostępu
Nowe funkcje ułatwień dostępu są domyślnie włączone dla aplikacji przeznaczonych dla programu .NET Framework 4.7.1 lub nowszego. Ponadto aplikacje przeznaczone dla starszej wersji programu .NET Framework, ale działają w programie .NET Framework 4.7.1 lub nowszym, mogą zrezygnować ze starszych zachowań ułatwień dostępu (a tym samym korzystać z ulepszeń ułatwień dostępu), dodając przełączniki do <AppContextSwitchOverrides>
elementu w <runtime>
sekcji pliku konfiguracji aplikacji i ustawiając ich wartość na false
. Poniższy fragment kodu pokazuje, jak wyrazić zgodę na ulepszenia ułatwień dostępu wprowadzone w programie .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>
Jeśli zdecydujesz się na korzystanie z funkcji ułatwień dostępu w nowszej wersji programu .NET Framework, musisz również jawnie wyrazić zgodę na funkcje z wcześniejszych wersji. Aby skonfigurować aplikację do korzystania z ulepszeń ułatwień dostępu zarówno w programie .NET Framework 4.7.1, jak i 4.7.2, dodaj następujący <AppContextSwitchOverrides>
element:
<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>
Aby skonfigurować aplikację do korzystania z ulepszeń ułatwień dostępu w programie .NET Framework 4.7.1, 4.7.2, 4.8 i aktualizacji zbiorczej programu .NET Framework 4.8 z sierpnia 2020 r., dodaj następujący <AppContextSwitchOverrides>
element:
<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>
Przywracanie starszego zachowania
Aplikacje przeznaczone dla wersji programu .NET Framework, począwszy od wersji 4.7.1, mogą wyłączać funkcje ułatwień dostępu, dodając przełączniki do <AppContextSwitchOverrides>
elementu w <runtime>
sekcji pliku konfiguracji aplikacji i ustawiając ich wartość na true
. Na przykład następująca konfiguracja zrezygnowała z funkcji ułatwień dostępu wprowadzonych w programie .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>
Co nowego w ułatwieniach dostępu w programie .NET Framework 4.8.1
Program .NET Framework 4.8.1 zawiera nowe funkcje ułatwień dostępu w następujących obszarach:
Windows Forms
Dodano i ulepszono reprezentacje interfejsu użytkownika
Przed programem .NET Framework 4.8.1 w systemie Windows Forms brakuje obsługi szeregu wzorców UIA w celu obsługi technologii pomocniczej do interakcji z aplikacjami. Ten niedobór może spowodować, że Narrator lub inni czytelnicy zawartości ekranu będą zgłaszać niekompletne lub nieprawidłowe informacje. Może to również mieć wpływ na ważne funkcje, takie jak przenoszenie kursora przez tekst w kontrolce TextBox . W programie .NET Framework 4.8.1 zaimplementowano wszystkie wymagane wzorce dla typowych kontrolek. Ta nowa funkcja zapewnia użytkownikom technologii pomocniczej znacznie bogatsze środowisko interakcji z aplikacjami.
- Dodano obsługę wzorca rozwijania/zwijania interfejsu użytkownika do kontrolki DateTimePicker .
- Dodano obsługę interfejsu użytkownika do kontrolki MonthCalendar . Teraz narzędzia technologii pomocniczej, takie jak Narrator, mogą przechodzić przez poszczególne daty w kontrolce.
- Zaimplementowano obsługę wzorca tekstu dla wszystkich kontrolek opartych na tekście, w tym TextBoxkontrolek , MaskedTextBox, PropertyGrid , edycji , DataGridViewTextBoxCellToolStripTextBoxi DomainUpDown .
- ToolTip Teraz postępuje zgodnie z wytycznymi WCAG2.1, aby być trwałym, odrzucalnym i unoszącym się w systemie Windows 11. Zmiany zachowania etykietki narzędzi są ograniczone do systemów Windows 11 z zainstalowanym programem .NET Framework 4.8.1 i mają zastosowanie tylko do aplikacji, w których limit czasu nie został ustawiony dla etykietki narzędzia. Etykietki narzędzi, które są utrwalane, można odrzucić za pomocą klawisza Esc lub klawisza Ctrl lub przechodząc do kontrolki z innym zestawem etykietek narzędzi.
Różne poprawki błędów dla istniejących funkcji ułatwień dostępu
- Narrator może teraz skupić się na pustej DataGridView kontrolce.
- Rozwiązano problem, który spowodował, że czytniki zawartości ekranu zliczyły ukryte kolumny podczas ogłaszania liczby kolumn w kontrolce DataGridView .
- Rozwiązano problem, który spowodował DataGridView ignorowanie ustawień czcionki ustawionych w obiekcie ,
DataGridviewCellStyle
jeśli formularz bazowy miałFont
właściwość, która różniła się odDefaultFont
. - Zaktualizowano
AccessibleName
właściwość DataGridView wewnętrznych pasków przewijania kontrolki, aby usunąć tekst "ScrollBar". - Naprawiono kolor
DataGridViewLinkCell
elementu po wybraniu komórki. - Rozwiązano problem z kontrolkami niestandardowymiDataGridView, który polegał na tym, że nie
ControlType
było żadnych elementów niestandardowych DataGridViewCell aniLocalizedControlType
nie podano ich. - Zaktualizowano współczynnik jasności do wartości 3,5:1 dla ToolStripButton kontrolek z
ToolStripRenderMode
ustawioną wartościąSystem
. - Ulepszona nawigacja ToolStrip za pomocą klawiatury w przypadku, gdy element jest typem
ToolStripComboBox
. - Zaktualizowano kolor ToolStripButton tła w trybie dużego kontrastu.
- Upewnij się, że istnieje prostokąt ograniczenia zgłoszony do technologii pomocniczej dla elementu ToolStripSeparator.
- Rozwiązano problem, który mógł spowodować awarię czytnika ekranu JAWS podczas odczytywania kontrolki PropertyGrid .
- Upewnij się, że drzewo hierarchii UIA dla PropertyGrid kontrolki jest aktualizowane po rozwinięciu złożonego wpisu, takiego jak
Font
. Upewnij się również, że drzewo jest prawidłowo aktualizowane, gdy wpis zostanie zwinięty i nie będzie już widoczny. - PropertyGrid kategorie mają teraz zlokalizowany typ kontrolki
PropertyGrid category
. - Rozwiązano problem z ComboBox tym, który mógł spowodować awarię aplikacji w obszarze Ułatwienia dostępu Szczegółowe informacje dla systemu Windows.
- Zaktualizowano kolor obramowania elementu Button , aby mieć większy kontrast w kolorach domyślnych.
- Włączone narzędzia technologiczne ułatwiające dostęp do
ControlBox
przycisków zmaksymalizowanego formularza podrzędnego MDI. - Właściwość
AccessibleName
kontrolki DomainUpDown ma nową wartość domyślną pustego ciągu. Pusty ciąg zachęci deweloperów do utworzenia znaczącej nazwy zamiast akceptowania poprzedniej niepustej wartości domyślnej. - Zaktualizowano właściwość przycisku Drukuj
AccessibleName
w PrintPreviewDialog obszarze "Przycisk wydruku" na "Drukuj", aby uniknąć nadmiarowości, gdy czytniki zawartości ekranu ogłaszają kontrolkę i jej typ. - Zaktualizowano kontrolki listy UIA, aby usunąć pusty element listy, gdy PropertyGrid komórka typu
ComboBox
jest zamknięta i nie jest już widoczna.
Windows Presentation Foundation (WPF)
Ulepszenia obsługi dostępnej etykietki narzędzi
W tej wersji WPF ulepszył środowisko, zapewniając, że etykietka narzędzia w bieżącym oknie można łatwo odrzucić za pomocą klawisza Esc, klawisza Ctrl (samodzielnie) lub kombinacji Ctrl+Shift+F10. Zakres klucza Esc został zmniejszony w tej wersji, aby zastosować go tylko do bieżącego okna, gdy wcześniej zastosowano go do dowolnej otwartej etykietki narzędzia w aplikacji. Domyślnie etykietki narzędzi WPF będą zgodne z wytycznymi WCAG2.1, które mają być trwałe, odrzucane i możliwe do aktywowania.
Co nowego w ułatwieniach dostępu w aktualizacji zbiorczej programu .NET Framework 4.8 z 11 sierpnia 2020 r.
Aktualizacja zbiorcza programu .NET Framework 4.8 z 11 sierpnia 202 KB4569746 0 r. obejmuje nowe funkcje ułatwień dostępu w formularzach systemu Windows:
Rozwiązuje problem z ogłaszaniem
PropertyGrid
elementów kontrolek i rozwiniętym/zwiniętym stanem kategorii przez czytniki zawartości ekranu.Aktualizacje dostępne wzorce kontrolki
PropertyGrid
i jej elementów wewnętrznych.Aktualizacje dostępne nazwy
PropertyGrid
elementów wewnętrznych kontrolki, dzięki czemu są one poprawnie ogłaszane przez czytniki zawartości ekranu.Adresy ograniczenia prostokąta dostępne właściwości dla
PropertyGridView
kontrolek.Umożliwia czytnikom zawartości ekranu poprawne ogłaszanie rozwiniętego/zwiniętego
DataGridView
stanu komórek pola kombi.
Co nowego w ułatwieniach dostępu w programie .NET Framework 4.8
Program .NET Framework 4.8 zawiera nowe funkcje ułatwień dostępu w następujących obszarach:
Windows Forms
W programie .NET Framework 4.8 formularze systemu Windows dodaje obsługę zdarzeń LiveRegions i Powiadomień do wielu powszechnie używanych kontrolek. Dodaje również obsługę narzędzia Wskazówki gdy użytkownik przechodzi do kontrolki przy użyciu klawiatury.
Obsługa regionów liveregionów interfejsu UIA w obszarze Etykiety i stanyStrips
UIA LiveRegions umożliwiają deweloperom aplikacji powiadamianie czytników zawartości ekranu o zmianie tekstu w kontrolce znajdującej się poza lokalizacją, w której pracuje użytkownik. Jest to przydatne, na przykład w przypadku StatusStrip kontrolki, która pokazuje stan połączenia. Jeśli połączenie zostanie przerwane i zmieni się stan, deweloper może chcieć powiadomić czytnik zawartości ekranu.
Począwszy od programu .NET Framework 4.8, windows Forms implementuje UIA LiveRegions dla kontrolek Label i StatusStrip . Na przykład poniższy kod używa elementu LiveRegion w kontrolce Label o nazwie label1
:
public Form1()
{
InitializeComponent();
label1.AutomationLiveSetting = AutomationLiveSetting.Polite;
}
…
Label1.Text = "Ready!";
Narrator ogłasza komunikat "Ready" niezależnie od tego, gdzie użytkownik wchodzi w interakcję z aplikacją.
Możesz również zaimplementować element UserControl jako 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);
}
}
}
Zdarzenia powiadomień UIA
Zdarzenie powiadomienia UIA wprowadzone w aktualizacji Fall Creators Update systemu Windows 10 umożliwia aplikacji zgłaszanie zdarzenia UIA, co prowadzi narratora po prostu do ogłoszenia na podstawie tekstu dostarczanego ze zdarzeniem, bez konieczności posiadania odpowiedniej kontroli w interfejsie użytkownika. W niektórych scenariuszach jest to prosty sposób na znaczne zwiększenie dostępności aplikacji. W programie może być również przydatne powiadamianie o postępie niektórych procesów, które mogą zająć dużo czasu. Aby uzyskać więcej informacji na temat zdarzeń powiadomień UIA, zobacz Czy aplikacja klasyczna może korzystać z nowego zdarzenia powiadomienia interfejsu użytkownika?.
W poniższym przykładzie jest wywoływane zdarzenie Powiadomienia:
MethodInfo raiseMethod = typeof(AccessibleObject).GetMethod("RaiseAutomationNotification");
if (raiseMethod != null) {
raiseMethod.Invoke(progressBar1.AccessibilityObject, new object[3] {/*Other*/ 4, /*All*/ 2, "The progress is 50%." });
}
Narzędzie Wskazówki przy dostępie za pomocą klawiatury
W aplikacjach przeznaczonych dla programu .NET Framework 4.7.2 i starszych wersji etykietka narzędzia sterującego może zostać wyzwolona tylko przez przeniesienie wskaźnika myszy do kontrolki. Począwszy od programu .NET Framework 4.8, użytkownik klawiatury może wyzwolić etykietkę narzędzia kontrolki, koncentrując się na kontrolce przy użyciu klawisza Tab lub klawiszy strzałek z klawiszami modyfikując lub bez klawiszy modyfikując. To szczególne rozszerzenie ułatwień dostępu wymaga dodatkowego przełącznika 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>
Na poniższej ilustracji przedstawiono etykietkę narzędzia, gdy użytkownik wybrał przycisk za pomocą klawiatury.
Windows Presentation Foundation (WPF)
Począwszy od programu .NET Framework 4.8, WPF zawiera szereg ulepszeń ułatwień dostępu.
Narratorzy ekranu nie ogłaszają już elementów z zwiniętym lub ukrytym widocznością
Elementy z zwiniętym lub ukrytym widocznością nie są już ogłaszane przez czytnik zawartości ekranu. Interfejsy użytkownika zawierające elementy z widocznością Visibility.Collapsed lub Visibility.Hidden mogą być błędnie reprezentowane przez czytniki zawartości ekranu, jeśli zostaną one ogłoszone użytkownikowi. Począwszy od programu .NET Framework 4.8, WPF nie zawiera już zwiniętych lub ukrytych elementów w widoku sterowania drzewa UIAutomation, dzięki czemu czytniki zawartości ekranu nie mogą już ogłaszać tych elementów.
Właściwość SelectionTextBrush do użycia z zaznaczonym tekstem nienależącym do Adornera
W programie .NET Framework 4.7.2 WPF dodano możliwość rysowania TextBox i PasswordBox zaznaczenia tekstu bez używania warstwy Adorner. Kolor pierwszego planu zaznaczonego tekstu w tym scenariuszu został podyktowany przez .SystemColors.HighlightTextBrush
Program .NET Framework 4.8 dodaje nową właściwość , SelectionTextBrush
która umożliwia deweloperom wybranie określonego pędzla dla zaznaczonego tekstu podczas korzystania z zaznaczenia tekstu innego niż Adorner. Ta właściwość działa tylko na TextBoxBasekontrolkach pochodnych i PasswordBox kontrolce w aplikacjach WPF z włączonym zaznaczeniem tekstu nienależącym do Adornera. Nie działa w kontrolce RichTextBox . Jeśli nie włączono zaznaczenia tekstu nienależące do modułu adoratora, ta właściwość jest ignorowana.
Aby użyć tej właściwości, po prostu dodaj ją do kodu XAML i użyj odpowiedniego pędzla lub powiązania. Wynikowy wybór tekstu wygląda następująco:
Możesz połączyć użycie SelectionBrush
właściwości i SelectionTextBrush
w celu wygenerowania dowolnej kombinacji kolorów tła i pierwszego planu, które uznasz za odpowiednie.
Obsługa właściwości UIAutomation ControllerFor
Właściwość UIAutomation ControllerFor
zwraca tablicę elementów automatyzacji, które są manipulowane przez element automatyzacji, który obsługuje tę właściwość. Ta właściwość jest często używana w przypadku ułatwień dostępu sugerowanych automatycznie. ControllerFor
jest używany, gdy element automatyzacji wpływa na co najmniej jeden segment interfejsu użytkownika aplikacji lub pulpitu. W przeciwnym razie trudno jest skojarzyć wpływ operacji sterowania z elementami interfejsu użytkownika. Ta funkcja dodaje możliwość zapewniania wartości właściwości przez kontrolki ControllerFor
.
Program .NET Framework 4.8 dodaje nową metodę wirtualną. GetControlledPeersCore() Aby podać wartość właściwości ControllerFor
, po prostu przesłoń tę metodę i zwróć element List<AutomationPeer>
dla kontrolek, które są manipulowane przez następujące AutomationPeerpolecenie :
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;
}
}
Etykietki narzędzi na dostępie za pomocą klawiatury
W programie .NET Framework 4.7.2 i starszych wersjach etykietki narzędzi są wyświetlane tylko wtedy, gdy użytkownik najecha kursorem myszy na kontrolkę. W programie .NET Framework 4.8 etykietki narzędzi są również wyświetlane na fokusie klawiatury, a także za pomocą skrótu klawiaturowego.
Aby włączyć tę funkcję, aplikacja musi być przeznaczona dla programu .NET Framework 4.8 lub wyrazić zgodę przy użyciu Switch.UseLegacyAccessibilityFeatures.3
przełączników i Switch.UseLegacyToolTipDisplay
AppContext . Poniżej przedstawiono przykładowy plik konfiguracji aplikacji:
<?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>
Po włączeniu wszystkie kontrolki zawierające etykietkę narzędzia są wyświetlane po odebraniu fokusu klawiatury przez kontrolkę. Etykietka narzędzia może zostać odrzucona w czasie lub po zmianie fokusu klawiatury. Użytkownicy mogą również ręcznie odrzucić etykietkę narzędzia przy użyciu nowego skrótu klawiaturowego Ctrl+Shift+F10. Po odrzuceniu etykietki narzędzia można ją wyświetlić ponownie za pomocą tego samego skrótu klawiaturowego.
Uwaga
Etykietki narzędzi wstążki na Ribbon kontrolkach nie będą wyświetlane na fokusie klawiatury; są one wyświetlane tylko za pomocą skrótu klawiaturowego.
Dodano obsługę właściwości SizeOfSet i PositionInSet UIAutomation
System Windows 10 wprowadził dwa nowe właściwości SizeOfSet
interfejsu użytkownikaAutomation i PositionInSet
, które są używane przez aplikacje do opisywania liczby elementów w zestawie. UIAutomation aplikacje klienckie, takie jak czytniki zawartości ekranu, mogą następnie wysyłać zapytania do aplikacji dla tych właściwości i ogłaszać dokładną reprezentację interfejsu użytkownika aplikacji.
Począwszy od programu .NET Framework 4.8, WPF uwidacznia te dwie właściwości w interfejsie użytkownikaAutomation w aplikacjach WPF. Można to zrobić na dwa sposoby:
Przy użyciu właściwości zależności.
WPF dodaje dwie nowe właściwości AutomationProperties.SizeOfSet zależności i AutomationProperties.PositionInSet. Deweloper może użyć języka XAML, aby ustawić swoje wartości:
<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>
Przez zastąpienie metod wirtualnych AutomationPeer.
Metody GetSizeOfSetCore() i GetPositionInSetCore() zostały dodane do
AutomationPeer
klasy . Deweloper może podać wartości iSizeOfSet
PositionInSet
przez zastąpienie tych metod, jak pokazano w poniższym przykładzie: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(); } }
Ponadto elementy w ItemsControl wystąpieniach zapewniają wartość tych właściwości automatycznie bez dodatkowej akcji od dewelopera. Jeśli element ItemsControl jest pogrupowany, kolekcja grup jest reprezentowana jako zestaw, a każda grupa jest liczone jako oddzielny zestaw, a każdy element wewnątrz tej grupy zapewnia jego pozycję wewnątrz tej grupy, a także rozmiar grupy. Na wartości automatyczne nie ma wpływu wirtualizacja. Nawet jeśli element nie jest zrealizowany, nadal jest liczone w kierunku całkowitego rozmiaru zestawu i wpływa na pozycję w zestawie elementów równorzędnych.
Wartości automatyczne są udostępniane tylko wtedy, gdy aplikacja jest przeznaczona dla programu .NET Framework 4.8. W przypadku aplikacji przeznaczonych dla starszej wersji programu .NET Framework można ustawić Switch.UseLegacyAccessibilityFeatures.3
przełącznik AppContext, jak pokazano w następującym pliku 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>
Projektant przepływu pracy programu Windows Workflow Foundation (WF)
Projektant przepływu pracy zawiera następujące zmiany w programie .NET Framework 4.8:
Użytkownicy korzystający z Narratora będą widzieć ulepszenia w etykietach przypadków flowSwitch.
Użytkownicy korzystający z Narratora zobaczą ulepszenia opisów przycisków.
Użytkownicy, którzy wybierają motywy o wysokim kontraście, zobaczą ulepszenia widoczności Projektant przepływu pracy i jego kontrolek, takie jak lepsze proporcje kontrastu między elementami i bardziej zauważalne pola wyboru używane dla elementów fokusu.
Jeśli aplikacja jest przeznaczona dla programu .NET Framework 4.7.2 lub starszej wersji, możesz wyrazić zgodę na te zmiany, ustawiając Switch.UseLegacyAccessibilityFeatures.3
przełącznik AppContext na false
w pliku konfiguracji aplikacji. Aby uzyskać więcej informacji, zobacz sekcję Korzystanie z ulepszeń ułatwień dostępu w tym artykule.
Co nowego w ułatwieniach dostępu w programie .NET Framework 4.7.2
Program .NET Framework 4.7.2 zawiera nowe funkcje ułatwień dostępu w następujących obszarach:
Windows Forms
Kolory zdefiniowane przez system operacyjny w motywach o wysokim kontraście
Począwszy od programu .NET Framework 4.7.2, formularze systemu Windows używają kolorów zdefiniowanych przez system operacyjny w motywach wysokiego kontrastu. Ma to wpływ na następujące kontrolki:
Strzałka listy rozwijanej kontrolki ToolStripDropDownButton .
RadioButton Kontrolki Buttoni CheckBox z ustawioną wartością FlatStyleFlatStyle.Flat lub .FlatStyle.Popup Wcześniej zaznaczone kolory tekstu i tła nie były kontrastujące i były trudne do odczytania.
Kontrolki zawarte w obiekcie GroupBox , które mają jej Enabled właściwość ustawioną na
false
.Kontrolki ToolStripButton, ToolStripComboBoxi ToolStripDropDownButton , które mają zwiększony współczynnik kontrastu jaskrawości w trybie dużego kontrastu.
Właściwość LinkColorDataGridViewLinkCell.
Ulepszenia narratora
Począwszy od programu .NET Framework 4.7.2, obsługa narratora jest rozszerzona w następujący sposób:
Ogłasza wartość ToolStripMenuItem.ShortcutKeys właściwości podczas ogłaszania tekstu elementu ToolStripMenuItem.
Wskazuje, kiedy właściwość ma Enabled ustawioną ToolStripMenuItem wartość
false
.Zwraca on opinię na temat stanu pola wyboru, gdy właściwość jest ustawiona ListView.CheckBoxes na
true
wartość .Kolejność koncentracji uwagi w trybie skanowania narratora jest zgodna z kolejnością wizualną kontrolek w oknie dialogowym pobierania ClickOnce.
Ulepszenia elementu DataGridView
Począwszy od programu .NET Framework 4.7.2, kontrolka DataGridView wprowadziła następujące ulepszenia ułatwień dostępu:
Wiersze można sortować przy użyciu klawiatury. Użytkownik może użyć klawisza F3 , aby posortować według bieżącej kolumny.
Szerokość kolumny bieżącej komórki można zwiększyć lub zmniejszyć za pomocą klawiszy strzałek Alt + w lewo/w prawo.
DataGridView.SelectionMode Gdy właściwość jest ustawiona na DataGridViewSelectionMode.FullRowSelect, nagłówek kolumny zmienia kolor, aby wskazać bieżącą kolumnę jako kartę użytkownika za pomocą komórek w bieżącym wierszu.
Właściwość AccessibleObject.Parent obiektu System.Windows.Forms.DataGridViewLinkCell.DataGridViewLinkCellAccessibleObject zwraca poprawną kontrolkę nadrzędną.
Ulepszone podpowiedzi wizualne
- Kontrolki RadioButton i CheckBox z pustą Text właściwością wyświetlają wskaźnik koncentracji uwagi po otrzymaniu fokusu.
Ulepszona obsługa siatki właściwości
PropertyGrid Elementy podrzędne kontrolki IsReadOnlyProperty zwracają
true
teraz element dla właściwości tylko wtedy, gdy element PropertyGrid jest włączony.PropertyGrid Elementy podrzędne kontrolki IsEnabledProperty zwracają
false
wartość dla właściwości tylko wtedy, gdy użytkownik może zmienić element PropertyGrid.
Ulepszona nawigacja za pomocą klawiatury
- Kontrolka ToolStripButton zezwala na fokus, gdy znajduje się w obiekcie ToolStripPanel , który ma właściwość ustawioną TabStop na
true
Windows Presentation Foundation (WPF)
Zmiany kontrolek CheckBox i RadioButton
W programie .NET Framework 4.7.1 i starszych wersjach kontrolki WPF System.Windows.Controls.CheckBox i System.Windows.Controls.RadioButton mają niespójne motywy oraz w motywach klasycznych i wysokich kontrastów niepoprawne wizualizacje fokusu. Te problemy występują w przypadkach, gdy kontrolki nie mają żadnego zestawu zawartości. Może to utrudnić przejście między motywami i wizualizacją fokusu.
W programie .NET Framework 4.7.2 te wizualizacje są teraz bardziej spójne w motywach i łatwiej widoczne w motywach klasycznych i wysokich kontrastów.
Kontrolki WinForms hostowane w aplikacji WPF
W przypadku kontrolki WinForms hostowanej w aplikacji WPF w programie .NET Framework 4.7.1 i starszych wersjach użytkownicy nie mogli wyprzeć warstwy WinForms, jeśli pierwsza lub ostatnia kontrolka w tej warstwie jest kontrolką WPF ElementHost . W programie .NET Framework 4.7.2 użytkownicy mogą teraz korzystać z warstwy WinForms.
Jednak zautomatyzowane aplikacje, które opierają się na fokusie, nigdy nie uciekają przed warstwą WinForms, mogą przestać działać zgodnie z oczekiwaniami.
Co nowego w ułatwieniach dostępu w programie .NET Framework 4.7.1
Program .NET Framework 4.7.1 zawiera nowe funkcje ułatwień dostępu w następujących obszarach:
Windows Presentation Foundation (WPF)
Ulepszenia czytnika zawartości ekranu
Jeśli włączono ulepszenia ułatwień dostępu, program .NET Framework 4.7.1 zawiera następujące ulepszenia wpływające na czytniki zawartości ekranu:
W programie .NET Framework 4.7 i starszych wersjach kontrolki Expander zostały ogłoszone przez czytniki zawartości ekranu jako przyciski. Począwszy od programu .NET Framework 4.7.1, są one poprawnie ogłaszane jako grupy możliwe do rozwinięcia/zwijane.
W programie .NET Framework 4.7 i starszych wersjach kontrolki DataGridCell zostały ogłoszone przez czytniki zawartości ekranu jako "niestandardowe". Począwszy od programu .NET Framework 4.7.1, są one teraz poprawnie ogłaszane jako komórka siatki danych (zlokalizowana).
Począwszy od programu .NET Framework 4.7.1, czytniki zawartości ekranu ogłaszają nazwę edytowalnego ComboBoxelementu .
W programie .NET Framework 4.7 i starszych wersjach kontrolki PasswordBox zostały ogłoszone jako "brak elementu w widoku" lub miały niepoprawne zachowanie. Ten problem został rozwiązany, począwszy od programu .NET Framework 4.7.1.
Obsługa interfejsu użytkownikaAutomation LiveRegion
Czytniki zawartości ekranu, takie jak Narrator, ułatwiają użytkownikom odczytywanie zawartości interfejsu użytkownika aplikacji, zwykle przez dane wyjściowe zamiany tekstu na mowę zawartości interfejsu użytkownika, która ma fokus. Jeśli jednak element interfejsu użytkownika ulegnie zmianie i nie ma fokusu, użytkownik może nie zostać powiadomiony i może przegapić ważne informacje. Regiony na żywo mają na celu rozwiązanie tego problemu. Deweloper może ich używać do informowania czytnika zawartości ekranu lub innego klienta interfejsu użytkownikaAutomation o wprowadzeniu ważnych zmian w elemecie interfejsu użytkownika. Czytnik zawartości ekranu może następnie zdecydować, jak i kiedy poinformować użytkownika o tej zmianie.
Aby obsługiwać regiony na żywo, do WPF dodano następujące interfejsy API:
Pola AutomationElementIdentifiers.LiveSettingProperty i AutomationElementIdentifiers.LiveRegionChangedEvent identyfikujące właściwość LiveSetting i zdarzenie LiveRegionChanged . Można je ustawić przy użyciu języka XAML.
Dołączona właściwość AutomationProperties.LiveSetting , która informuje czytnik zawartości ekranu o znaczeniu zmiany interfejsu użytkownika na użytkownika.
Właściwość AutomationProperties.LiveSettingProperty identyfikującą właściwość AutomationProperties.LiveSetting dołączoną.
Metoda AutomationPeer.GetLiveSettingCore , która może zostać zastąpiona, aby podać wartość LiveSetting .
Metody AutomationProperties.GetLiveSetting i AutomationProperties.SetLiveSetting , które pobierają i ustawiają wartość LiveSetting .
Wyliczenie System.Windows.Automation.AutomationLiveSetting , które definiuje następujące możliwe wartości LiveSetting :
AutomationLiveSetting.Off. Element nie wysyła powiadomień, jeśli zawartość regionu na żywo uległa zmianie.
AutomationLiveSetting.Polite. Element wysyła powiadomienia nie przerywające, jeśli zawartość regionu na żywo uległa zmianie.
AutomationLiveSetting.Assertive. Element wysyła powiadomienia przerywające, jeśli zawartość regionu na żywo uległa zmianie.
Możesz utworzyć region LiveRegion, ustawiając właściwość AutomationProperties.LiveSetting na interesującym go elemenie, jak pokazano w poniższym przykładzie:
<TextBlock Name="myTextBlock" AutomationProperties.LiveSetting="Assertive">announcement</TextBlock>
Gdy dane w regionie na żywo zmienią się i musisz poinformować czytnik zawartości ekranu, jawnie zgłosisz zdarzenie, jak pokazano w poniższym przykładzie.
var peer = FrameworkElementAutomationPeer.FromElement(myTextBlock);
peer.RaiseAutomationEvent(AutomationEvents.LiveRegionChanged);
Dim peer = FrameworkElementAutomationPeer.FromElement(myTextBlock)
peer.RaiseAutomationEvent(AutomationEvents.LiveRegionChanged)
Duży kontrast
Począwszy od programu .NET Framework 4.7.1, wprowadzono ulepszenia w dużym kontraście do różnych kontrolek WPF. Są one teraz widoczne po ustawieniu motywu HighContrast . Są to:
Expander kontrolka
Wizualizacja fokusu dla kontrolki Expander jest teraz widoczna. Wizualizacje klawiatury dla ComboBoxListBoxkontrolek i , są RadioButton również widoczne. Na przykład:
Przed:
Po:
CheckBoxkontrolki i RadioButton
Tekst w kontrolkach i RadioButton jest teraz łatwiejszy do wyświetlenia po wybraniu CheckBox w motywach o wysokim kontraście. Na przykład:
Przed:
Po:
ComboBox kontrolka
Począwszy od programu .NET Framework 4.7.1, obramowanie wyłączonej ComboBox kontrolki jest tym samym kolorem co wyłączony tekst. Na przykład:
Przed:
Po:
Ponadto przyciski wyłączone i ukierunkowane używają poprawnego koloru motywu.
Przed:
Po:
Na koniec w programie .NET Framework 4.7 i starszych wersjach ustawienie ComboBox stylu kontrolki spowodowało, że
Toolbar.ComboBoxStyleKey
strzałka listy rozwijanej będzie niewidoczna. Ten problem został rozwiązany, począwszy od programu .NET Framework 4.7.1. Na przykład:Przed:
Po:
DataGrid kontrolka
Począwszy od programu .NET Framework 4.7.1, strzałka wskaźnika sortowania w DataGrid kontrolkach używa teraz poprawnych kolorów motywu. Na przykład:
Przed:
Po:
Ponadto w programie .NET Framework 4.7 i starszych wersjach domyślny styl łącza został zmieniony na nieprawidłowy kolor myszy w trybach dużego kontrastu. Rozwiązano ten problem, począwszy od programu .NET Framework 4.7.1. DataGrid Podobnie kolumny pól wyboru używają oczekiwanych kolorów dla opinii fokusu klawiatury, począwszy od programu .NET Framework 4.7.1.
Przed:
Po:
Aby uzyskać więcej informacji na temat ulepszeń ułatwień dostępu WPF w programie .NET Framework 4.7.1, zobacz Ulepszenia ułatwień dostępu w WPF.
Ulepszenia ułatwień dostępu formularzy systemu Windows
W programie .NET Framework 4.7.1 formularze systemu Windows (WinForms) zawierają zmiany ułatwień dostępu w następujących obszarach.
Ulepszony ekran w trybie dużego kontrastu
Począwszy od programu .NET Framework 4.7.1, różne kontrolki WinForms oferują ulepszone renderowanie w trybach HighContrast dostępnych w systemie operacyjnym. System Windows 10 zmienił wartości niektórych kolorów systemowych o dużym kontraście, a formularze systemu Windows są oparte na strukturze Windows 10 Win32. Aby uzyskać najlepsze środowisko, uruchom polecenie w najnowszej wersji systemu Windows i wybierz najnowsze zmiany systemu operacyjnego, dodając plik app.manifest w aplikacji testowej i usuń komentarz z wiersza obsługiwanego systemu operacyjnego Windows 10, aby wyglądał następująco:
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
Oto kilka przykładów zmian o dużym kontraście:
Znaczniki wyboru w MenuStrip elementach są łatwiejsze do wyświetlenia.
Po wybraniu wyłączone MenuStrip elementy są łatwiejsze do wyświetlenia.
Tekst w wybranej Button kontrolce kontrastuje z kolorem zaznaczenia.
Wyłączony tekst jest łatwiejszy do odczytania. Na przykład:
Przed:
Po:
Ulepszenia wysokiego kontrastu w oknie dialogowym Wyjątek wątku.
Ulepszona obsługa narratora
Formularze systemu Windows w programie .NET Framework 4.7.1 zawierają następujące ulepszenia ułatwień dostępu dla Narratora:
Dostęp MonthCalendar do kontrolki można uzyskać za pomocą Narratora, a także innych narzędzi automatyzacji interfejsu użytkownika.
Kontrolka CheckedListBox powiadamia Narratora o zmianie stanu sprawdzania elementu, aby użytkownik był powiadamiany o zmianie wartości elementu listy.
Kontrolka DataGridViewCell zgłasza prawidłowy stan tylko do odczytu narratorowi.
Narrator może teraz odczytywać wyłączony ToolStripMenuItem tekst, natomiast wcześniej pomijał wyłączone elementy menu.
Ulepszona obsługa wzorców ułatwień dostępu interfejsu użytkownikaAutomation
Począwszy od programu .NET Framework 4.7.1, deweloperzy narzędzi technologii ułatwień dostępu mogą korzystać z typowych wzorców ułatwień dostępu interfejsu API i właściwości dla kilku kontrolek WinForms. Te ulepszenia ułatwień dostępu obejmują:
Element ComboBox i ToolStripSplitButton teraz obsługuje wzorzec rozwijania/zwijania.
Funkcja DataGridViewCheckBoxCell obsługuje teraz wzorzec przełącznika.
Kontrolka ToolStripItem obsługuje Name właściwość i wzorzec rozwijania/zwijania.
Kontrolki NumericUpDown i DomainUpDown obsługują Name właściwość .
Ulepszone środowisko przeglądarki właściwości
Począwszy od programu .NET Framework 4.7.1, formularze systemu Windows obejmują:
- Lepsza nawigacja za pomocą klawiatury w różnych oknach wyboru listy rozwijanej.
- Zmniejszenie niepotrzebnej karty zatrzymuje się.
- Lepsze raportowanie typów kontrolek.
- Ulepszone zachowanie narratora.
ASP.NET kontrolki sieci Web
Począwszy od programów .NET Framework 4.7.1 i Visual Studio 2017 w wersji 15.3, ASP.NET ulepsza sposób pracy kontrolek internetowych ASP.NET z technologią ułatwień dostępu w programie Visual Studio. Zmiany obejmują następujące elementy:
Zmiany w implementacji brakujących wzorców ułatwień dostępu interfejsu użytkownika w kontrolkach, takich jak okno dialogowe Dodawanie pola w kreatorze Widok szczegółów lub okno dialogowe Konfigurowanie widoku listy kreatora ListView.
Zmiany w celu ulepszenia wyświetlania w trybie dużego kontrastu, takich jak Edytor pól pagera danych.
Zmiany w celu ulepszenia środowisk nawigacji za pomocą klawiatury dla kontrolek, takich jak okno dialogowe Pola w kreatorze Edytowanie pól pagera kontrolki DataPager, okno dialogowe Konfigurowanie obiektuKontekstu lub okno dialogowe Konfigurowanie wyboru danych kreatora Konfigurowanie źródła danych.
Narzędzia zestawu SDK platformy .NET
Narzędzie edytora konfiguracji (SvcConfigEditor.exe) i narzędzie podglądu śledzenia usługi (SvcTraceViewer.exe) zostały ulepszone przez rozwiązywanie różnych problemów z ułatwieniami dostępu. Większość z nich to małe problemy, takie jak nazwa niezdefiniowana lub niektóre wzorce automatyzacji interfejsu użytkownika nie są prawidłowo implementowane. Chociaż wielu użytkowników nie będzie wiedzieć o tych nieprawidłowych wartościach, klienci korzystający z technologii pomocniczych, takich jak czytniki zawartości ekranu, znajdą te narzędzia zestawu SDK bardziej dostępne.
Te ulepszenia zmieniają niektóre poprzednie zachowania, takie jak kolejność koncentracji uwagi klawiatury.
Przepływ pracy programu Windows Workflow Foundation (WF) Projektant
Zmiany ułatwień dostępu w Projektant przepływu pracy obejmują następujące elementy:
Kolejność karty zmienia się w lewo do prawej i u góry do dołu w niektórych kontrolkach:
Zainicjuj okno korelacji służące do ustawiania danych korelacji dla InitializeCorrelation działania.
Okno definicji zawartości dla Receivedziałań , Send, SendReplyi ReceiveReply .
Więcej funkcji jest dostępnych za pomocą klawiatury:
Podczas edytowania właściwości działania grupy właściwości można zwinąć za pomocą klawiatury po raz pierwszy.
Ikony ostrzeżeń są dostępne za pomocą klawiatury.
Przycisk Więcej właściwości w oknie Właściwości jest dostępny za pomocą klawiatury.
Użytkownicy klawiatury mogą uzyskiwać dostęp do elementów nagłówka w okienkach Argumenty i zmienne Projektant przepływu pracy.
Ulepszona widoczność elementów z fokusem, na przykład w następujących przypadkach:
Dodawanie wierszy do siatek danych używanych przez projektantów przepływu pracy Projektant i działań.
Tabbing through fields in the and ( Tabbing through fields in the and activities ( Tabbing through fields in the ReceiveReply and SendReply activities ( Tabbing
Ustawianie wartości domyślnych zmiennych lub argumentów
Czytniki zawartości ekranu mogą teraz poprawnie rozpoznać:
Punkty przerwania ustawione w projektancie przepływu pracy.
Działania FlowSwitch<T>, FlowDecisioni CorrelationScope .
Zawartość Receive działania.
Typ docelowy InvokeMethod działania.
Pole kombi Wyjątek i sekcja Finally w TryCatch działaniu.
Pole kombi Typ komunikatu, splitter w oknie Dodawanie inicjatorów korelacji, okno Definicja zawartości i okno Koreluj definicję w działaniach obsługi komunikatów (Receive, Send, SendReplyi ReceiveReply).
Przejścia i przejścia maszyny stanu.
Adnotacje i łączniki dotyczące FlowDecision działań.
Menu kontekstowe (kliknij prawym przyciskiem myszy) dla działań.
Edytory wartości właściwości, przycisk Wyczyść wyszukiwanie, przyciski Według kategorii i sortowania alfabetycznego oraz okno dialogowe Edytor wyrażeń w siatce właściwości.
Procent powiększenia w Projektant przepływu pracy.
Działanie InvokeDelegate .
Okno Wybieranie typów dla działań słownika (
Microsoft.Activities.AddToDictionary<TKey,TValue>
,Microsoft.Activities.RemoveFromDictionary<TKey,TValue>
itp.).Okno Przeglądaj i Wybierz typ platformy .NET.
Linki do stron nadrzędnych w Projektant przepływu pracy.
Użytkownicy, którzy wybierają motywy o wysokim kontraście, zobaczą wiele ulepszeń widoczności Projektant przepływu pracy i jego kontrolek, takich jak lepsze proporcje kontrastu między elementami i bardziej zauważalne pola wyboru używane dla elementów fokusu.