Files
29WxOrder/29WxOrderWpf/Utils/UiCtrlUtils.cs
T

91 lines
2.9 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
namespace _29WxOrderWpf.Utils
{
public class UiCtrlUtils
{
/// <summary>
/// 查找模板控件的子控件
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public static T FindVisualChild<T>(DependencyObject obj) where T : DependencyObject
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(obj, i);
if (child != null && child is T)
{
return (T)child;
}
else
{
T childOfChild = FindVisualChild<T>(child);
if (childOfChild != null)
{
return childOfChild;
}
}
}
return null;
}
/// <summary>
/// 查找模板控件的子控件
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <param name="xName"></param>
/// <returns></returns>
public static T FindVisualChild<T>(DependencyObject obj, string xName) where T : DependencyObject
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(obj, i);
string controlName = child?.GetValue(Control.NameProperty) as string;
if (controlName == xName)
{
return (T)child;
}
else
{
T childOfChild = FindVisualChild<T>(child, xName);
if (childOfChild != null)
{
return childOfChild;
}
}
}
return null;
}
public static List<T> FindVisualChildAll<T>(DependencyObject obj, string xName) where T : DependencyObject
{
List<T> list= new List<T>();
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(obj, i);
string controlName = child?.GetValue(Control.NameProperty) as string;
if (controlName == xName)
{
list.Add((T)child);
}
else
{
list.AddRange(FindVisualChildAll<T>(child, xName));
}
}
return list;
}
}
}