2013-01-23 59 views
12

में मैं WPF में एक UserControl है:कैसे UserControl के अनलोड ईवेंट को सक्रिय करने के लिए एक WPF खिड़की

<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> 

जब मैं अनलोड इस नियंत्रण, WPF जुटाने घटना DBLoginUserFrame_Unloaded कि मेरी सेटिंग और यह एक काम करता है।

<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> 

कैसे ईवेंट हैंडलर MainWindow को UserControl अनलोड घटना जोड़ने के लिए:

मैं WPF में MainWindow कि उपयोगकर्ता नियंत्रण इस लोड लेकिन जब विंडो बंद हो तब मेरी usercontrol उतारना आग नहीं करता है?

उत्तर

14
documentation से

:

"ध्यान दें कि उतार घटना के बाद एक आवेदन को बंद करने के लिए शुरू होता बढ़ाया नहीं गया आवेदन शट डाउन तब होता है जब हालत ShutdownMode संपत्ति द्वारा परिभाषित होता है आप एक हैंडलर के भीतर सफाई कोड जगह।। अनलोड किए गए ईवेंट के लिए, जैसे कि विंडो या उपयोगकर्ता नियंत्रण के लिए, इसे अपेक्षित के रूप में नहीं कहा जा सकता है। "

यदि आपकी विंडो बंद करना आपके एप्लिकेशन के शटडाउन को ट्रिगर करता है, तो यह कारण हो सकता है। उस स्थिति में, यहां तक ​​कि विंडो की अनलोड ईवेंट भी नहीं कहा जा सकता है, इसलिए मेरा मानना ​​है कि Window.Closing ईवेंट पर भरोसा करना बेहतर है।

अनलोड किए जाने वाले कार्यों को संभालने का एक तरीका नियंत्रण के अनलोड हैंडलर विधि ("DBLoginUserFrame_Unloaded") का खुलासा करना है, अपने उपयोगकर्ता नियंत्रण उदाहरण को मेनविंडो में नाम दें और इसे विंडो से कॉल करें। ईवेंट बंद करना। के रूप में वर्णित here

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

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

एक अन्य विकल्प अपने क्रियान्वयन अब तक रखने पर भी Dispatcher.ShutdownStarted घटना के लिए कोई हैंडलर अपने UserControl में जोड़ना है।

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