modal ejemplo dialogbox wpf modal-dialog

wpf - dialogbox - showdialog c# ejemplo



¿Cómo hago un diálogo modal para una página en mi aplicación WPF? (4)

Tengo una ventana de 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.



No estás buscando un diálogo modal aquí. Necesita una función que desactivará el control de "página", mostrará un cuadro de diálogo y lo volverá a habilitar cuando se cierre el cuadro de diálogo.

Aunque no estoy muy seguro de si entiendes lo que significa un diálogo modal.


Si estoy correcto al interpretar su mensaje, quiere algo que funcione de manera similar a lo que Billy Hollis demuestra en su aplicación StaffLynx .

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, agregué un 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 agregué un método Show(Control view) , que encuentra el ''PART_DialogView'' y agrega el visto en la propiedad Content .

Esto me permite usar DialogPresenter siguiente manera:

<controls:DialogPresenter x:Name="DialogPresenter"> <!-- Normal parent view content here --> <TextBlock>Hello World</TextBlock> <Button>Click Me!</Button> </controls:DialogPresenter>

Para el controlador de eventos de botones (o comando vinculado), simplemente llamo al método Show () de DialogPresenter .

También puede agregar fácilmente marcas de ScaleTransform a la plantilla de 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!


Tengo un proyecto en github que es un FrameworkElement personalizado que le permite mostrar contenido modal sobre el contenido principal.

El control se puede usar así:

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

caracteristicas:

  • 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 forma amigable con MVVM mediante el enlace a la propiedad IsModal .