//< 함수 >

public static IEnumerable<T> FindLogicalChildren<T>(DependencyObject obj) where T : DependencyObject
{
if (obj != null)
{
if (obj is T)
yield return obj as T;
foreach (DependencyObject child in LogicalTreeHelper.GetChildren(obj).OfType<DependencyObject>())
foreach (T c in FindLogicalChildren<T>(child))
yield return c;
}
}
//< 호출 부분 >
foreach (var a in FindLogicalChildren<ContentControl>(this))
{
if (dic.ContainsKey(a.Name))
{
if (a is GroupBox)
{
GroupBox grb = (GroupBox)a;
grb.Header = dic[a.Name];
}
else if (a is TabItem)
{
TabItem cvs = (TabItem)a;
cvs.Header = dic[a.Name];
}
else if (a.Content is String)
{
a.Content = dic[a.Name];
}
}
}

자식 컨트롤을 재귀적으로 탐색하여 리턴하여주는 함수를 통하여 모든 버튼을 반환한다.
그러나 Canvas와 TabItem의 Text는 Content가 아닌 Header를 쓰기 때문에 따로 검사를 해주어야 한다.
이 방식을 이용하여 이미 개발되어 있는 프로젝트의 각 컨트롤 추출 및 입력으로 다국어 지원을 쉽게 해결 할 수있었다.






+ Recent posts