You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.3 KiB
41 lines
1.3 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Media;
|
|
using System.Windows;
|
|
|
|
namespace MultiTerm.Wpf.CustomControl;
|
|
|
|
public static class UIHelper
|
|
{
|
|
/// from https://stackoverflow.com/questions/636383/how-can-i-find-wpf-controls-by-name-or-type
|
|
/// <summary>
|
|
/// Finds a parent of a given item on the visual tree.
|
|
/// </summary>
|
|
/// <typeparam name="T">The type of the queried item.</typeparam>
|
|
/// <param name="child">A direct or indirect child of the queried item.</param>
|
|
/// <returns>The first parent item that matches the submitted type parameter.
|
|
/// If not matching item can be found, a null reference is being returned.</returns>
|
|
public static T? FindVisualParent<T>(DependencyObject child)
|
|
where T : DependencyObject
|
|
{
|
|
// get parent item
|
|
DependencyObject parentObject = VisualTreeHelper.GetParent(child);
|
|
|
|
// we’ve reached the end of the tree
|
|
if (parentObject == null) return null;
|
|
|
|
// check if the parent matches the type we’re looking for
|
|
if (parentObject is T parent)
|
|
{
|
|
return parent;
|
|
}
|
|
else
|
|
{
|
|
// use recursion to proceed with next level
|
|
return FindVisualParent<T>(parentObject);
|
|
}
|
|
}
|
|
}
|
|
|