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

728x90
반응형

■ Visual 클래스 : 타입으로 자손 찾기

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

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 , ,

댓글을 달아 주세요