2010-06-03 5 views
3

프로젝트 A에는 다양한 보고서를 시작하는 스택 명령 패널이있는 WPF 창 (데이터 입력 양식)이 있습니다. 메뉴는 데이터베이스에서 동적으로 작성된 목록입니다. 내가하려고하는 것은 메뉴 선택과 관련된 CommandText를 기반으로 해당 WPF 창을 시작하는 것입니다. 나는 WPF 윈도우 (CommandText)의 이름을 받아들이고 이름으로 윈도우의 새로운 인스턴스를 시작하는 단일 함수를 만들고 싶습니다.이름으로 WPF 창 표시

클래스에 메서드를 시작하는 방법의 예제를 발견했지만 창과 작동하는 메서드를 찾지 못했습니다. 나는 그것이 스위치로 할 수 있고 단지 모든 창문을지도 모른다라는 것을 알고있다. 그러나 60-70가있다. 그리고 나는 부 풀리는 것을 피하려고 노력하고 있었다.

나는 반복적으로 TypeOfActivator.CreateInstance을 사용하는 데 실패했습니다. 제안? 이것은 가능한가?

답변

1

이 작업을 시도 할 수 있습니다 :

string windowClass = "CreateWindow.MyWindow"; 
Type type = Assembly.GetExecutingAssembly().GetType(windowClass); 
ObjectHandle handle = Activator.CreateInstance(null, windowClass); 
MethodInfo method = type.GetMethod("Show"); 
method.Invoke(handle.Unwrap(), null); 
위의 코드는 당신의 창 (네임 스페이스 접두사와)과 유형 "CreateWindow.MyWindow은"현재 실행중인 어셈블리입니다 "CreateWindow.MyWindow"라고되어 있다고 가정

.

+0

나는 네임 스페이스와 프로젝트가 동일한 이름을 가졌다 고 잘못 가정했습니다. 네임 스페이스 접두사가 변경되어 작동했습니다. – jasonk

3

Activator가 정상적으로 작동합니다. 어떤 오류가 있습니까? 아래 코드가 도움이 될 경우 시도하십시오

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    Window wnd = (Window)CreateWindow("WpfApplication1.Window2"); 
    wnd.Show(); 

} 

public object CreateWindow(string fullClassName) 
{ 
    Assembly asm = this.GetType().Assembly; 

    object wnd = asm.CreateInstance(fullClassName); 
    if (wnd == null) 
    { 
     throw new TypeLoadException("Unable to create window: " + fullClassName); 
    } 
    return wnd; 
}