2013-01-23 6 views
12

Ich habe ein Usercontrol in WPF Feuer:Wie Unload-Ereignis des Usercontrol in einem WPF-Fenster

<UserControl x:Class="XLogin.DBLogin" 
      x:Name="DBLoginUserFrame" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      Height="263" 
      Width="353" 
      Loaded="DBLoginUserFrame_Loaded" 
      Unloaded="DBLoginUserFrame_Unloaded"> 
    <Grid> 
    <GroupBox Header="Database Connection" 
       HorizontalAlignment="Left" 
       Height="243" 
       Margin="10,10,0,0" 
       VerticalAlignment="Top" 
       Width="333"> 
     <Grid> 
     <TextBox x:Name="TextUserDB" 
       HorizontalAlignment="Left" 
       Height="20" 
       Margin="101,60,0,0" 
       TextWrapping="Wrap" 
       VerticalAlignment="Top" 
       Width="173" /> 
     <Label Content="Password:" 
       HorizontalAlignment="Left" 
       Height="24" 
       VerticalAlignment="Top" 
       Width="70" 
       HorizontalContentAlignment="Right" 
       Margin="10,85,0,0" /> 
     <PasswordBox x:Name="TextPasswordDB" 
        HorizontalAlignment="Left" 
        Height="20" 
        Margin="101,89,0,0" 
        VerticalAlignment="Top" 
        Width="173" /> 
     <Button x:Name="BtnConnect" 
       Content="Connetti" 
       Height="29" 
       Width="123" 
       Margin="101,152,97,24" 
       Click="BtnConnect_Click" /> 
     </Grid> 
    </GroupBox> 

    </Grid> 
</UserControl> 

Wenn ich diese Kontrolle Unload, WPF erhöht Ereignis DBLoginUserFrame_Unloaded, dass meine Einstellungen zu speichern und es macht einen Job.

Ich habe das Hauptfenster in WPF, die diese Benutzersteuerung laden, aber wenn das Fenster geschlossen ist, hat mein Usercontrol UNLOAD nicht Feuer:

<Window x:Class="XLogin.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" 
    xmlns:local="clr-namespace:XLogin" Unloaded="Window_Unloaded_1"> 
<Grid> 
    <local:DBLogin/> 
</Grid></Window> 

Wie das Usercontrol Unload Event hinzufügen Event-Handler Mainwindow?

Antwort

14

Vom documentation:

„Beachten Sie, dass das Unloaded Ereignis nicht ausgelöst wird, nachdem eine Anwendung Herunterfahren beginnt Anwendung Abschaltung erfolgt, wenn die Bedingung, die durch die Shutdown Eigenschaft definiert tritt auf, wenn Sie Bereinigungscode in einem Handler platzieren.. Für das Ereignis Unloaded, z. B. für ein Window oder ein UserControl, wird es möglicherweise nicht wie erwartet aufgerufen. "

Wenn das Schließen des Fensters das Herunterfahren der Anwendung auslöst, kann das die Ursache sein. In diesem Fall wird möglicherweise auch das Unload-Ereignis des Windows nicht aufgerufen, daher glaube ich, dass es besser ist, sich auf das Ereignis Window.Closing zu verlassen.

Ein Ansatz zum Behandeln der Tasks, die Ihr UserControl beim Entladen ausführt, ist die Unload-Handler-Methode des Steuerelements ("DBLoginUserFrame_Unloaded"), benennen Sie Ihre UserControl-Instanz im MainWindow und rufen Sie sie vom Window.Closing-Ereignis auf.

public MainWindow() 
{ 
    // Add this 
    this.Closing += MainWindow_Closing; 
} 

void MainWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e) 
{ 
    this.MyUserControl.MethodToBeCalledWhenUnloaded(). 
} 

Eine weitere Option ist die Implementierung so weit zu halten, sondern auch in Ihrem Usercontrol für das Dispatcher.ShutdownStarted Ereignis einen Handler hinzufügen, wie here beschrieben.

public MyUserControl() 
{ 
    this.Dispatcher.ShutdownStarted += Dispatcher_ShutdownStarted; 
} 
Verwandte Themen