1. ホーム
  2. c#

[解決済み】WPFウィンドウのすべてのコントロールを種類別に検索する

2022-04-05 10:38:14

質問

ウィンドウ上のすべてのコントロールをタイプ別に検索する方法を探しています。

例えば すべて検索 TextBoxes 特定のインターフェイスを実装しているすべてのコントロールを検索するなど。

解決方法は?

これは、トリックを行う必要があります

public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject
{
    if (depObj != null)
    {
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
        {
            DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
            if (child != null && child is T)
            {
                yield return (T)child;
            }
                
            foreach (T childOfChild in FindVisualChildren<T>(child))
            {
                yield return childOfChild;
            }
        }
    }
}

そして、次のようにコントロールを列挙します。

foreach (TextBlock tb in FindVisualChildren<TextBlock>(window))
{
    // do something with tb here
}