첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
유용한 소스 코드가 있으면 icodebroker@naver.com으로 보내주시면 감사합니다.
블로그 자료는 자유롭게 사용하세요.

■ VisualTreeHelper 클래스 : 자식 비주얼 객체 리스트 구하기

------------------------------------------------------------------------------------------------------------------------

using System.Collections.Generic;

using System.Windows;

using System.Windows.Media;

 

#region 자식 비주얼 객체 리스트 구하기 - GetChildVisualObjectList<T>(sourceObject, allowSubclass)

 

/// <summary>

/// 자식 비주얼 객체 리스트 구하기

/// </summary>

/// <typeparam name="T">자식 비주얼 타입</typeparam>

/// <param name="sourceObject">소스 객체</param>

/// <param name="allowSubclass">서브 클래스 허용 여부</param>

/// <returns>자식 비주얼 객체 리스트</returns>

public List<T> GetChildVisualObjectList<T>(DependencyObject sourceObject, bool allowSubclass = false) where T : DependencyObject

{

    List<T> targetList = new List<T>();

 

    SetChildVisualObjectList<T>(sourceObject, allowSubclass, targetList);

 

    return targetList;

}

 

#endregion

 

#region 자식 비주얼 객체 리스트 설정하기 - SetChildVisualObjectList<T>(sourceObject, allowSubclass, targetList)

 

/// <summary>

/// 자식 비주얼 객체 리스트 설정하기

/// </summary>

/// <typeparam name="T">자식 비주얼 타입</typeparam>

/// <param name="sourceObject">소스 객체</param>

/// <param name="allowSubclass">서브 클래스 허용 여부</param>

/// <param name="targetList">타겟 리스트</param>

private void SetChildVisualObjectList<T>(DependencyObject sourceObject, bool allowSubclass, List<T> targetList) where T : DependencyObject

{

    int childCount = VisualTreeHelper.GetChildrenCount(sourceObject);

 

    for(int i = 0; i < childCount; i++)

    {

        DependencyObject childObject = VisualTreeHelper.GetChild(sourceObject, i);

 

        if(childObject.GetType() == typeof(T) || (allowSubclass && childObject is T))

        {

            targetList.Add((T)childObject);

        }

 

        SetChildVisualObjectList<T>(childObject, allowSubclass, targetList);

    }

}

 

#endregion

------------------------------------------------------------------------------------------------------------------------

Posted by 사용자 icodebroker
TAG

댓글을 달아 주세요