private static void IterateVisualChildren(DependencyObject parent, HwndContentControlAutomationPeer.IteratorCallback callback) { if (parent == null) { return; } int childrenCount = VisualTreeHelper.GetChildrenCount(parent); for (int childIndex = 0; childIndex < childrenCount; ++childIndex) { DependencyObject child = VisualTreeHelper.GetChild(parent, childIndex); UIElement element = child as UIElement; UIElement3D uiElement3D = child as UIElement3D; AutomationPeer peerForElement1; if (element != null && (peerForElement1 = UIElementAutomationPeer.CreatePeerForElement(element)) != null) { callback(peerForElement1); } else { AutomationPeer peerForElement2; if (uiElement3D != null && (peerForElement2 = UIElement3DAutomationPeer.CreatePeerForElement((UIElement3D)child)) != null) { callback(peerForElement2); } else { HwndContentControlAutomationPeer.IterateVisualChildren(child, callback); } } } }
/// <inheritdoc /> protected override List <AutomationPeer> GetChildrenCore() { #pragma warning disable CS8619 // Nullability of reference types in value doesn't match target type. return(this.Owner.VisualChildrenRecursive() .Select(CreatePeerForElement) .Where(x => x != null) .ToList()); #pragma warning restore CS8619 // Nullability of reference types in value doesn't match target type. AutomationPeer?CreatePeerForElement(DependencyObject o) { if (o is UIElement uiElement) { return(UIElementAutomationPeer.CreatePeerForElement(uiElement)); } if (o is UIElement3D uiElement3D) { return(UIElement3DAutomationPeer.CreatePeerForElement(uiElement3D)); } return(null); } }
#pragma warning restore CS8619 // Nullability of reference types in value doesn't match target type. static AutomationPeer?CreatePeerForElement(DependencyObject o) { return(o switch { UIElement uiElement => UIElementAutomationPeer.CreatePeerForElement(uiElement), UIElement3D uiElement3D => UIElement3DAutomationPeer.CreatePeerForElement(uiElement3D), _ => null, });
/// <inheritdoc /> protected override List <AutomationPeer> GetChildrenCore() { AutomationPeer CreatePeerForElement(DependencyObject o) { if (o is UIElement uiElement) { return(UIElementAutomationPeer.CreatePeerForElement(uiElement)); } if (o is UIElement3D uiElement3D) { return(UIElement3DAutomationPeer.CreatePeerForElement(uiElement3D)); } return(null); } return(this.Owner.VisualChildrenRecursive() .Select(CreatePeerForElement) .Where(x => x != null) .ToList()); }