2023-09-15 08:23:20 +02:00
|
|
|
|
// 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;
|
|
|
|
|
|
|
2024-04-26 19:41:44 +02:00
|
|
|
|
namespace HostsUILib.Helpers
|
2023-09-15 08:23:20 +02:00
|
|
|
|
{
|
|
|
|
|
|
// 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<T>(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<T>();
|
|
|
|
|
|
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;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|