2014-09-07 4 views
2

나는 창과 프레임을 가지고 있습니다. 해당 프레임에서 "닫기"버튼을 클릭하여 닫기를 원하는 많은 페이지를 엽니 다. 페이지가 내 프레임을 볼 수없는 문제입니다. 페이지의 닫기 버튼 이벤트에 글을 쓰려고했습니다. 메인 윈도우에서 다른 이벤트를 실행하십시오. 메인 윈도우에서 프레임을보기는 쉽지만 작동하지 않습니다. 여기 페이지WPF의 프레임 내의 페이지 닫기

private void closebt_MouseDown(object sender, MouseButtonEventArgs e) 
    { 
     var main = new MainWindow(); 
     main.Exitbt_PreviewKeyDown(main.Exitbt, e); 

    } 

내 코드는 여기에 메인 창에 메시지 표시하지만

internal void Exitbt_PreviewKeyDown(object sender, MouseButtonEventArgs e) 
     { 
     ProjectorFrame.Content = ""; 
     MessageBox.Show("done"); 
     } 

의 코드이지만 좀 도와주세요 닫지 페이지 입니다.

답변

3

당신이 closebt_MouseDown의 투수 안에 다른 MainWindow를 인스턴스를 만들 이유는 모르겠지만, 내가 당신을 위해 다음과 같은 코드 것 도움이 희망 :

private void closebt_MouseDown(object sender, MouseButtonEventArgs e) 
{ 
    MainWindow main = Application.Current.MainWindow as MainWindow; 
    if (main != null) 
    { 
     main.Exitbt_PreviewKeyDown(main.Exitbt, e); 
     main.Close(); 
    } 
} 

편집 됨 :

나는 가정 그 응용 프로그램의 기본 창 개체는 MainWindow이므로 이전 코드를 사용하면 응용 프로그램 창을 닫을 수 있다고 생각했습니다. 하지만 댓글을 달았을 때 Application.Current.MainWindowMainWindow과 다르며 mainnull이되었습니다. 메인 창 개체를 전달하여이 인스턴스를 만든 다음

class YourPageClass 
{ 
    public YourPageClass(MainWindow mainWindow) 
    { 
     main = mainWindow; 
    } 
    private MainWindow main; 

    (snip) 
} 

: 따라서

, 나는 메인 창 개체를 얻을 수있는 간단한 방법은 참조를 유지하기 위해 페이지 클래스에 다음 생성자를 만드는 것입니다 생각 :

// somewhere in MainWindow code where instantiate your page object 
var page = new YourPageClass(this); 

이렇게하면 기본 Window 개체를 가져올 수 있습니다. 다음과 같이 그래서 지금, 당신이 당신의 창 개체를 닫을 수 있습니다 : 당신의 도움에 대한

// in YourPageClass code 

private void closebt_MouseDown(object sender, MouseButtonEventArgs e) 
{ 
    if (main != null) 
    { 
     main.Exitbt_PreviewKeyDown(main.Exitbt, e); 
     main.Close(); 
    } 
} 
+0

감사하지만 IF 조건에 입력하지 있기 때문에이 작동하지 않습니다, 주요 객체로 값이 너무 null이 될 수 없습니다 무엇인가? –

+0

주 객체가 null을 포함하는 이유는 무엇입니까? 주요 객체에 대한 값은 무엇이므로 null이 아니겠습니까? –

+0

미안하지만 메인 윈도우 객체의 타입이 MainWindow라고 가정했기 때문에'Application.Current.MainWindow'를'MainWindow'로 캐스팅하려고했습니다. 새로운 MainWindow 객체를 만들 필요가 있다면, 코드에'main.Exitbt_PreviewKeyDown (main.Exitbt, e);'다음에'main.Close();'를 추가 할 수 있습니다. – yukitos