2013-01-02 2 views
1

MainWindow가있는 간단한 WPF 응용 프로그램이 있습니다. 코드에서 언로드 된 이벤트를 설정하십시오. 시작 URL로 MainWindow을 설정하십시오. 창을 닫으면 언로드되지 않습니다. 한 번의 클릭으로 두 번째 창 (NotMainWindow)을 만듭니다.이상한 언로드 동작 - WPF 창

버튼 클릭 이벤트에서 MainWindow를 호출하십시오. 닫기 MainWindow 및 언로드가 트리거됩니다. 왜 행동의 차이가 있습니까? 내가 뭘 하려는지, 어떤 종류의 언로드 된 이벤트를 얻으려면 한 번만?

<Window x:Class="WpfApplication2.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525" Unloaded="Main_Unloaded"> 
<Grid> 

</Grid> 
</Window> 

    private void Main_Unloaded(object sender, RoutedEventArgs e) 
    { 

    } 

<Window x:Class="WpfApplication2.NotMainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="NotMainWindow" Height="300" Width="300"> 
<Grid> 
    <Button Content="Show Main" Height="25" Margin="10" Width="70" Click="Button_Click" /> 
</Grid> 
</Window> 


private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     MainWindow win = new MainWindow(); 
     win.Show(); 
    } 

<Application x:Class="WpfApplication2.App" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     StartupUri="NotMainWindow.xaml"> 
<Application.Resources> 

</Application.Resources> 
</Application> 
+0

닫혀있을 때 호출되지 않습니다. 그것이 문제입니다. 물론로드시 호출되지 않습니다! : P – Harsha

+0

@Blachshma - 혼란을 없애기 위해 질문을 수정했습니다. – Harsha

+0

MainWindow를 만든 다음 즉시 닫고 언로드되지 않았다고 말하는 것입니까? – Blachshma

답변

3

귀하의 의견을 토대로 저는 귀하가 말하는 시나리오를 이해합니다. 응용 프로그램을 종료 할 때 언로드 된 (예 : 마지막 창을 닫은) known issue입니다. 예를 들어, 당신이 마지막 창을 닫을 때 알고 싶은 경우

public MainWindow() 
{ 
    this.Closing += new CancelEventHandler(MainWindow_Closing); 
    InitializeComponent(); 
} 


void MainWindow_Closing(object sender, CancelEventArgs e) 
{ 
    // Closing logic here. 
} 

: 그냥 창은 Closing 이벤트를 사용 닫을 때 알고 싶은 경우

응용 프로그램을 종료 할 때 사용해야합니다. ShutdownStarted

public MainWindow() 
{ 
    this.Dispatcher.ShutdownStarted += Dispatcher_ShutdownStarted; 
    InitializeComponent(); 
} 

private void Dispatcher_ShutdownStarted(object sender, EventArgs e) 
{ 
    //do what you want to do on app shutdown 
} 
+0

음. 이것은 합리적인 해결책처럼 보입니다. 내 문제는 실제로, 창 자체가 아니라 건물에있는 컨트롤에서 언로드 이벤트가 필요하다는 것입니다. 컨트롤은 모든 종류의 창에서 호스팅 될 수 있지만 부모 컨트롤에 대해서는 아무 것도 알 수 없습니다. 컨트롤을 언로드 할 때 정리를해야합니다. : | – Harsha

+0

이 문제를 해결할 필요가있는 모든 사람들에게 답을 수락했습니다. :) – Harsha