첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
본 블로그는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 블로그 콘텐츠 향상을 위해 쓰여집니다.

728x90
반응형
728x170
using System;
using System.Windows;
using System.Windows.Media;

#region 타입으로 자손 찾기 - FindDescendantByType(source, descendantType, specificTypeOnly)

/// <summary>
/// 타입으로 자손 찾기
/// </summary>
/// <param name="source">소스 객체</param>
/// <param name="descendantType">자손 타입</param>
/// <param name="specificTypeOnly">특정 타입만 찾기 여부</param>
/// <returns>자손 객체</returns>
public Visual FindDescendantByType(Visual source, Type descendantType, bool specificTypeOnly)
{
    if(source == null)
    {
        return null;
    }

    if(specificTypeOnly ? (source.GetType() == descendantType) : (source.GetType() == descendantType) || (source.GetType().IsSubclassOf(descendantType)))
    {
        return source;
    }

    Visual target = null;

    if(source is FrameworkElement)
    {
        (source as FrameworkElement).ApplyTemplate();
    }

    for(int i = 0; i < VisualTreeHelper.GetChildrenCount(source); i++)
    {
        Visual visual = VisualTreeHelper.GetChild(source, i) as Visual;

        target = FindDescendantByType(visual, descendantType, specificTypeOnly);

        if(target != null)
        {
            break;
        }
    }

    return target;
}

        #endregion
#region 타입으로 자손 찾기 - FindDescendantByType(source, descendantType)

/// <summary>
/// 타입으로 자손 찾기
/// </summary>
/// <param name="source">소스 객체</param>
/// <param name="descendantType">자손 타입</param>
/// <returns>자손 객체</returns>
public Visual FindDescendantByType(Visual source, Type descendantType)
{
    return FindDescendantByType(source, descendantType, true);
}

#endregion
#region 타입으로 자손 찾기 - FindDescendantByType<TDescendant>(source)

/// <summary>
/// 타입으로 자손 찾기
/// </summary>
/// <typeparam name="TDescendant">자손 타입</typeparam>
/// <param name="source">소스 객체</param>
/// <returns>자손 객체</returns>
public TDescendant FindDescendantByType<TDescendant>(Visual source) where TDescendant : Visual
{
    Visual target = VisualHelper.FindDescendantByType(source, typeof(TDescendant));

    return (TDescendant)target;
}

#endregion
728x90
반응형
그리드형
Posted by 사용자 icodebroker
TAG , ,

댓글을 달아 주세요