Tengo una tarea muy interesante con la que necesito ayuda. La descripción es la siguiente:¿Cómo disparo un evento personalizado desde un Control de usuario?
Tengo un control de usuario (SomeUserControl), que estoy usando en una ventana principal. Escribo mi aplicación completamente en SomeUserControl, y Main Window aloja SomeUserControl y nada más.
Ahora tengo un botón de apagado (en SomeUserControl), que se supone que cierra la ventana principal. La razón de esto es que no quiero que nada de SomeUserControl cierre la aplicación en sí, sino que active un evento desde SomeUserControl, y Main Window lo reciba, y la ventana principal cerrará la aplicación en lugar de SomeUserControl.
¿Cómo lo hago? No estoy familiarizado con el concepto de crear y manejar eventos personalizados, por lo que si alguien pudiera explicarlo en palabras y en código como ejemplo, ¡le estaré muy agradecido!
Editar: Aquí está mi código hasta el momento.
(en la ventana 2)
Public Event CloseApp As EventHandler
Private Sub CancelButton_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles CancelButton.Click
DialogResult = False
RaiseEvent CloseApp(Me, New EventArgs)
End Sub
(En la ventana principal) Pública loginPage Como Nueva loginPage
Public Sub New()
InitializeComponent()
AddHandler loginPage.CloseApp, AddressOf Me.ShutDownJobChangeWindow
End Sub
Private Sub ShutDownJobChangeWindow(ByVal sender As Object, ByVal e As EventArgs)
Application.Current.Shutdown()
End Sub
Meta: Quiero cerrar la aplicación al hacer clic cancelar en la ventana 2, pero no quiero hacerlo de tal manera que la ventana 2 se cierre solo, pero enviando una notificación a la ventana principal, y principal La ventana cierra la aplicación.
como la solución provista por AkselK, ¿cómo lo hago en VB? especialmente la parte en If (CloseApp! = null). Porque intellisense simplemente no puede encontrar CloseApp. - will0809 Hace 20 minutos – will0809
Tengo la misma pregunta, pero estoy usando MVVM, así que no puedo usar esto: - someUserCtrl.CloseApp + = new EventHandler (MyFn); En lugar de eso, utilicé las bibliotecas MVVM Light y agregué un desencadenador de eventos a mi MainWindow como i: EventTrigger>< /i:Interaction.Triggers> Pero no funciona. –