【Silverlight】 指定の型のコントロール一覧を取得するには

// TextBoxコントロールの一覧を取得
List<TextBox> textBoxList
    = (from v in this.GetVisualOfType<TextBox>()
        select v).ToList();

using System;
using System.Windows;
using System.Windows.Media;
using System.Collections.Generic;
using System.Windows.Controls;
using System.Linq;

namespace Extensions
{
    // DependencyObjectクラスの拡張メソッド
    public static class DependencyObjectExtensions
    {
        // 指定の型のコントロールを取得
        public static IEnumerable<T> 
            GetVisualOfType<T>(this DependencyObject obj)
        {
            return GetVisualTree(obj).Where(
                    element => element.GetType() == typeof(T)
                ).Cast<T>();
        }

        // 子要素一覧を取得します。
        public static IEnumerable<DependencyObject> 
            GetVisualTree(this DependencyObject obj)
        {
            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
            {
                var child = VisualTreeHelper.GetChild(obj, i);
                yield return child;

                foreach (var children in GetVisualTree(child))
                {
                    yield return children;
                }
            }
        }
    }
}

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中