private static bool DoesHideDescendants(UIElement element) { ImportantForAccessibility importantForAccessibility = GetImportantForAccessibilityAttached(element); bool isAccessibilityLabelSet = GetAccessibilityLabelAttached(element) != null; return(importantForAccessibility == ImportantForAccessibility.Yes || importantForAccessibility == ImportantForAccessibility.NoHideDescendants || (importantForAccessibility == ImportantForAccessibility.Auto && isAccessibilityLabelSet == true)); }
/// <summary> /// Sets the ImportantForAccessibility property for <paramref name="uiElement"/>. /// It uses AutomationProperties.AccessibilityView to expose the element and its children /// to narrator. ImportantForAccessibility value is stored as an attached property. /// </summary> /// <param name="uiElement">Element which ImportantForAccessibility property is set.</param> /// <param name="importantForAccessibility">The new value of ImportantForAccessibility property.</param> public static void SetImportantForAccessibility(UIElement uiElement, ImportantForAccessibility importantForAccessibility) { // Check if property is already set to requested value. if (GetImportantForAccessibilityAttached(uiElement) == importantForAccessibility) { return; } SetImportantForAccessibilityAttached(uiElement, importantForAccessibility); UpdateName(uiElement); UpdateAccessibilityViewIfNeeded(uiElement); }
/// <summary> /// Sets the ImportantForAccessibility property for <paramref name="uiElement"/>. /// It uses AutomationProperties.AccessibilityView to expose the element and its children /// to narrator. ImportantForAccessibility value is stored as an attached-like property. /// </summary> /// <param name="uiElement">Element which ImportantForAccessibility property is set.</param> /// <param name="importantForAccessibility">The new value of ImportantForAccessibility property.</param> public static void SetImportantForAccessibility(UIElement uiElement, ImportantForAccessibility importantForAccessibility) { // Check if property is already set to requested value. if (GetImportantForAccessibilityProp(uiElement) == importantForAccessibility) { return; } SetImportantForAccessibilityProp(uiElement, importantForAccessibility); // Mark element as dirty MarkElementDirty(uiElement); }
void UpdateAccessibilityImportance(Page page, ImportantForAccessibility importantForAccessibility, bool forceFocus) { var pageRenderer = Android.Platform.GetRenderer(page); if (pageRenderer?.View == null) { return; } pageRenderer.View.ImportantForAccessibility = importantForAccessibility; if (forceFocus) { pageRenderer.View.SendAccessibilityEvent(global::Android.Views.Accessibility.EventTypes.ViewFocused); } }
void UpdateAccessibilityImportance(Page page, ImportantForAccessibility importantForAccessibility, bool forceFocus) { var pageRenderer = page.Handler as INativeViewHandler; if (pageRenderer?.NativeView == null) { return; } pageRenderer.NativeView.ImportantForAccessibility = importantForAccessibility; if (forceFocus) { pageRenderer.NativeView.SendAccessibilityEvent(global::Android.Views.Accessibility.EventTypes.ViewFocused); } }
/// <summary> /// Sets AccessibilityView property for <paramref name="element"/> and its children according to /// the element's <paramref name="importantForAccessibility"/> property and /// <see cref="AccessibilityLabelAttachedProperty"/> values. /// </summary> /// <param name="element"></param> /// <param name="elementPeer"></param> /// <param name="importantForAccessibility"></param> private static void UpdateAccessibilityViewForUIElement(UIElement element, AutomationPeer elementPeer, ImportantForAccessibility importantForAccessibility) { switch (importantForAccessibility) { case ImportantForAccessibility.Auto when GetAccessibilityLabelAttached(element) == null: element.ClearValue(AutomationProperties.AccessibilityViewProperty); SetChildrenAccessibilityViewFromImportantForAccessibility(elementPeer); break; case ImportantForAccessibility.Auto when GetAccessibilityLabelAttached(element) != null: case ImportantForAccessibility.Yes: var currentAccessibilityView = AutomationProperties.GetAccessibilityView(element); AutomationProperties.SetAccessibilityView(element, AccessibilityView.Content); // Generate the label in case the element was hidden. if (currentAccessibilityView == AccessibilityView.Raw) { UpdateName(element); } SetChildrenAccessibilityView(elementPeer, AccessibilityView.Raw); break; case ImportantForAccessibility.No: AutomationProperties.SetAccessibilityView(element, AccessibilityView.Raw); SetChildrenAccessibilityViewFromImportantForAccessibility(elementPeer); break; case ImportantForAccessibility.NoHideDescendants: AutomationProperties.SetAccessibilityView(element, AccessibilityView.Raw); SetChildrenAccessibilityView(elementPeer, AccessibilityView.Raw); break; default: break; } }
/// <summary> /// ImportantForAccessibilityAttached property setter. /// </summary> /// <param name="element"></param> /// <param name="value"></param> private static void SetImportantForAccessibilityAttached(UIElement element, ImportantForAccessibility value) { element.SetValue(ImportantForAccessibilityAttachedProperty, value); }
/// <summary> /// Sets AccessibilityView property for <paramref name="element"/> and its children according to /// the element's <paramref name="importantForAccessibility"/> property and /// <see cref="AccessibilityLabelAttachedProperty"/> values. /// </summary> /// <param name="element"></param> /// <param name="elementPeer"></param> /// <param name="importantForAccessibility"></param> private static void UpdateAccessibilityViewForUIElement(UIElement element, AutomationPeer elementPeer, ImportantForAccessibility importantForAccessibility) { switch (importantForAccessibility) { case ImportantForAccessibility.Auto when GetAccessibilityLabelAttached(element) == null: element.ClearValue(AutomationProperties.AccessibilityViewProperty); SetChildrenAccessibilityViewFromImportantForAccessibility(elementPeer); break; case ImportantForAccessibility.Auto when GetAccessibilityLabelAttached(element) != null: case ImportantForAccessibility.Yes: AutomationProperties.SetAccessibilityView(element, AccessibilityView.Content); SetChildrenAccessibilityView(elementPeer, AccessibilityView.Raw); break; case ImportantForAccessibility.No: AutomationProperties.SetAccessibilityView(element, AccessibilityView.Raw); SetChildrenAccessibilityViewFromImportantForAccessibility(elementPeer); break; case ImportantForAccessibility.NoHideDescendants: AutomationProperties.SetAccessibilityView(element, AccessibilityView.Raw); SetChildrenAccessibilityView(elementPeer, AccessibilityView.Raw); break; default: break; } }
private static void SetImportantForAccessibilityProp(UIElement element, ImportantForAccessibility value) { EnsureElementAccessibilityContext(element).ImportantForAccessibilityProp = value; }