2009-09-25 4 views
0

wpf 응용 프로그램의 모든 명명 된 컨트롤을 나열하는 방법이 필요합니다.Wpf : 응용 프로그램의 모든 컨트롤 이름 나열

C++에서는 리소스 파일을 사용하여 양식의 모든 컨트롤 목록을 볼 수 있습니다. wpf 응용 프로그램에서 컨트롤 목록을 보는 비슷한 방법이 필요합니다. 이름은 데이터베이스에서 사용되므로 어떻게 가져 왔는지는 중요하지 않습니다. 따라서 필자는 자동화할 필요가 있으므로 놓치지 않거나 잘못 입력하지 않아도됩니다.

누구든지이 작업을 수행하는 방법에 대한 아이디어가 있습니까? xaml 파일을 읽고 이름을 고를 수있는 어딘가에 도구가 있을까요?

답변

0

누군가가 나에게 보낸이 이전 버전 :

당신은 당신이 관심있는 컨트롤을 WPF 나무를 통해 재귀 및 찾을 LogicalTreeHelper (또는 VisualTreeHelper)를 사용할 수 있습니다

을 나는 당신이 알고하지 않습니다. Windows 또는 ASP.net 프로젝트를 사용하지만 이것은 wpf 양식 프로젝트 용입니다.

1

xaml 파일은 xml 형식입니다. 임의의 xml 파서를 사용하여 xaml 파일을 구문 분석 할 수 있습니다. xaml 파일의 모든 부분이 controls (요소)가 아니며 컨트롤이 작동하도록 지정된 이름을 가질 필요가 없음을 알 수 있습니다.

런타임을 원하면 이미 제안 된대로 LogicalTreeHelper 또는 VisualTreeHelper을 사용할 수 있습니다. 당신이 그것을 사용하는 방법

private void ProcessLogicalTree(object current) 
{ 
    string elementInfo = current.GetType().Name; 

    if (current is FrameworkElement) 
    { 
     elementInfo += " - Name: " + (current as FrameworkElement).Name; 
    } 

    MessageBox.Show(elementInfo); 

    DependencyObject dependencyObject = current as DependencyObject; 

    if (dependencyObject != null) 
    { 
     foreach (object child in LogicalTreeHelper.GetChildren(dependencyObject)) 
     { 
      ProcessLogicalTree(child); 
     } 
    } 
} 

을 그리고이은 다음과 같습니다 :

3

이 당신을 도울 것로드 이벤트에 또는 Button_Click 이벤트에서 바람직

ProcessLogicalTree(this); // Where 'this' is your Window or your UserControl 

합니다.

+0

이것은 훌륭한 대답이며 내가 찾고있는 것입니다. 고맙습니다. – MikeMalter

관련 문제