Tengo una ventana WPF que tiene, entre otros controles, un marco. En ese marco, muestro diferentes páginas. ¿Hay alguna manera de hacer un diálogo modal a solo una página? Cuando estoy mostrando el diálogo, no debería ser posible hacer clic en ningún control en la página, pero debería ser posible hacer clic en un control en la misma ventana que no está en la página.¿Cómo hago un cuadro de diálogo modal para una página en mi aplicación WPF?
Respuesta
Si estoy en lo cierto al interpretar su mensaje, quiere algo que funcione de manera similar a lo Billy Hollis demonstrates in his StaffLynx application.
Recientemente construí un control similar y resulta que este tipo de idea es relativamente simple de implementar en WPF. Creé un control personalizado llamado DialogPresenter. En la plantilla de control para el control personalizado, añadí marcado similar al siguiente:
<ControlTemplate TargetType="{x:Type local=DialogPresenter}">
<Grid>
<ContentControl>
<ContentPresenter />
</ContentControl>
<!-- The Rectangle is what simulates the modality -->
<Rectangle x:Name="Overlay" Visibility="Collapsed" Opacity="0.4" Fill="LightGrey" />
<Grid x:Name="Dialog" Visibility="Collapsed">
<!-- The template for the dialog goes here (borders and such...) -->
<ContentPresenter x:Name="PART_DialogView" />
</Grid>
</Grid>
<ControlTemplate.Triggers>
<!-- Triggers to change the visibility of the PART_DialogView and Overlay -->
</ControlTemplate.Triggers>
</ControlTemplate>
También he añadido un método Show(Control view)
, que encuentra la del 'PART_DialogView', y añade el pasado en vista de la propiedad Content
.
Esto entonces me permite usar la DialogPresenter
de la siguiente manera:
<controls:DialogPresenter x:Name="DialogPresenter">
<!-- Normal parent view content here -->
<TextBlock>Hello World</TextBlock>
<Button>Click Me!</Button>
</controls:DialogPresenter>
al controlador de botones de evento (o comando de cota), simplemente llama al método Show() de la DialogPresenter
.
También puede agregar fácilmente el marcado ScaleTransform a la plantilla DialogPresenter para obtener los efectos de escala que se muestran en el video. Esta solución tiene un código de control personalizado limpio y ordenado, y una interfaz muy simple para su equipo de programación de IU.
Espero que esto ayude!
No está buscando un cuadro de diálogo modal aquí. Necesita una función que desactive el control de "página", muestre un cuadro de diálogo y vuelva a habilitarlo cuando se cierre el cuadro de diálogo.
No estoy seguro si entiendes lo que significa un diálogo modal.
¿Por qué el voto a favor? Una ventana modal es una ventana que es la única ventana que puede aceptar entrada en ese momento para una aplicación. – Mez
Por qué no utilizar bombas mensaje anidada para crear controles modales
http://deanchalk.com/wpf-modal-controls-via-dispatcherframe-nested-message-pumps/
Tengo un proyecto en github que es una costumbre FrameworkElement
que le permite mostrar el contenido modal sobre el contenido principal.
El control se puede utilizar como esto:
<c:ModalContentPresenter IsModal="{Binding DialogIsVisible}">
<TabControl Margin="5">
<Button Margin="55"
Padding="10"
Command="{Binding ShowModalContentCommand}">
This is the primary Content
</Button>
</TabItem>
</TabControl>
<c:ModalContentPresenter.ModalContent>
<Button Margin="75"
Padding="50"
Command="{Binding HideModalContentCommand}">
This is the modal content
</Button>
</c:ModalContentPresenter.ModalContent>
</c:ModalContentPresenter>
Características:
- Muestra contenido arbitrario.
- No deshabilita el contenido principal mientras se muestra el contenido modal.
- Desactiva el acceso del mouse y del teclado al contenido principal mientras se muestra el contenido modal.
- Solo es modal para el contenido que cubre, no para toda la aplicación.
- se puede utilizar de una manera amistosa MVVM mediante el enlace a la propiedad
IsModal
.
- 1. Cómo crear un cuadro de diálogo modal genérico/reutilizable para WPF después de MVVM
- 2. Elemento HTML5 semánticamente exacto para un cuadro de diálogo modal
- 3. Cómo evitar que Debug.Assert (...) muestre un cuadro de diálogo modal
- 4. Diálogo flotante no modal en WPF
- 5. ¿Cómo se hace un diálogo modal en WPF?
- 6. Depurar un cuadro de diálogo modal (showModalDialog) en IE
- 7. ¿Cómo implementar correctamente un diálogo modal en la parte superior de un diálogo no modal?
- 8. Bootstrap: en un diálogo modal, ¿cómo hago que el menú desplegable se expanda fuera del cuadro de diálogo?
- 9. Cómo cerrar un cuadro de diálogo modal de jquery y actualizar la página principal
- 10. En el cuadro de diálogo de la IU de jquery, es posible colocar un cuadro de diálogo modal sobre otro cuadro de diálogo modal
- 11. El cuadro de diálogo no modal de WPF representa el cuadro de texto no editable
- 12. WPF: Crear un cuadro de diálogo/solicitud
- 13. Cómo mostrar y administrar un cuadro de diálogo simple de aplicación-modal en Cocoa
- 14. Rieles: ¿AJAX es un cuadro de diálogo modal?
- 15. Aplicación MFC y un cuadro de diálogo modal que no es MFC
- 16. ¿Hay un cuadro de diálogo de color para WPF?
- 17. Cuadro de diálogo modal de jQuery sobre iFrame
- 18. Desvanecimiento en superposición en el cuadro de diálogo modal
- 19. Convierta un cuadro de diálogo no modal a modal en tiempo de ejecución
- 20. Reabra el cuadro de diálogo modal en MFC
- 21. Cómo ocultar un cuadro de diálogo modal sin regresar de. ShowDialog?
- 22. WPF cuadro de diálogo no modal desde el complemento MS Excel
- 23. ¿Cómo cerrar un cuadro de diálogo modal de jQuery UI haciendo clic fuera del área cubierta por el cuadro?
- 24. blockui sobre el cuadro de diálogo modal jQueryUI
- 25. jQuery: desvanecimiento en el cuadro de diálogo modal
- 26. El cuadro de diálogo modal JQuery UI usa 100% CPU
- 27. ¿Cómo abrir un diálogo modal en el applet de Java?
- 28. cómo usar jQuery para mostrar un diálogo no modal?
- 29. ¿Por qué no puedo escribir TinyMCE en mi cuadro de diálogo modal jQueryUI?
- 30. WPF, Prisma v2, Región en un cuadro de diálogo modal, agregar región en el código detrás de
Sí, obtuve la idea de la aplicación StaffLynx. Me resulta muy difícil asimilar este material de WPF, pero creo que será más fácil. Para que el diálogo sea móvil, creo que hay más cosas que deben hacerse. –
Ciertamente, para hacer la vista movible, sustituiría un lienzo donde tenemos la cuadrícula llamada "Diálogo". También tendrías que hacer todo lo de arrastrar/soltar. Hay una buena visión general de este concepto en: http://www.codeproject.com/KB/WPF/DraggingElementsInCanvas.aspx –
¡Hola Brad, gran respuesta! ¿Compartirías el código fuente completo de DialogPresenter? Me encantaría usarlo en uno de mis proyectos. Gracias, Jens. – FantaMango77