// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Media; namespace HostsUILib.Helpers { // Taken from https://github.com/microsoft/microsoft-ui-xaml/blob/main/test/MUXControlsTestApp/Utilities/VisualTreeUtils.cs // Original copyright header: // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. public static class VisualTreeUtils { public static T FindVisualChildByType(this DependencyObject element) where T : DependencyObject { if (element == null) { return null; } if (element is T elementAsT) { return elementAsT; } int childrenCount = VisualTreeHelper.GetChildrenCount(element); for (int i = 0; i < childrenCount; i++) { var result = VisualTreeHelper.GetChild(element, i).FindVisualChildByType(); if (result != null) { return result; } } return null; } public static FrameworkElement FindVisualChildByName(this DependencyObject element, string name) { if (element == null || string.IsNullOrWhiteSpace(name)) { return null; } if (element is FrameworkElement elementAsFE && elementAsFE.Name == name) { return elementAsFE; } int childrenCount = VisualTreeHelper.GetChildrenCount(element); for (int i = 0; i < childrenCount; i++) { var result = VisualTreeHelper.GetChild(element, i).FindVisualChildByName(name); if (result != null) { return result; } } return null; } } }