Sé cómo hacer esto en la aplicación Windows Form, pero de todas formas no pude encontrarlo en una aplicación WPF. ¿Cómo le presentaría al usuario un DialogBox de bloqueo con la opción Sí/No y obtendría/procesaría la respuesta del usuario?Cómo crear un DialogBox para solicitar al usuario la opción Sí/No en WPF
Respuesta
Aquí es an example:
string sMessageBoxText = "Do you want to continue?";
string sCaption = "My Test Application";
MessageBoxButton btnMessageBox = MessageBoxButton.YesNoCancel;
MessageBoxImage icnMessageBox = MessageBoxImage.Warning;
MessageBoxResult rsltMessageBox = MessageBox.Show(sMessageBoxText, sCaption, btnMessageBox, icnMessageBox);
switch (rsltMessageBox)
{
case MessageBoxResult.Yes:
/* ... */
break;
case MessageBoxResult.No:
/* ... */
break;
case MessageBoxResult.Cancel:
/* ... */
break;
}
Tenga en cuenta que si bien la respuesta de Radu funciona, no se puede aplicar estilos de WPF para el cuadro de mensaje.
Tomé un enfoque diferente para este problema.
Creé una clase para servir como un modelo de vista para la ventana de mi mensaje y creé un estilo sobre cómo quería que mi ventana apareciera. Más tarde, en el código, creé una nueva ventana, configuré DataContext en una instancia de mi modelo de vista y configuré la propiedad Style de la ventana con el estilo que creé para la ventana.
Sé que suena un poco exagerado, y no estoy seguro de cómo otras personas solucionan este mismo problema ... pero mi solución es bastante flexible y realmente me está gustando.
Por ejemplo, aquí está diálogo Ver Modelo:
Public Class MyDialogViewModel
Public Event Closed()
Public Property Message As String
Public Property Cancel As MyNamespace.RelayCommand
Public Property Close As MyNamespace.RelayCommand
Public Property WasCancelled As Boolean
Public Sub New()
WasCancelled = True
Cancel = New MyNamespace.RelayCommand(AddressOf CancelClicked)
Close = New MyNamespace.RelayCommand(AddressOf CloseClicked)
End Sub
Private Sub CancelClicked()
RaiseEvent Closed()
End Sub
Private Sub CloseClicked()
WasCancelled = False
RaiseEvent Closed()
End Sub
End Class
Aquí es mi estilo para una ventana básica "mensaje":
<Style x:Key="myMessageStyle" TargetType="{x:Type myNameSpace:CustomDialogWindow}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<ControlTemplate.Resources>
<Style TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}">
<Setter Property="Width" Value="100"/>
<Setter Property="Height" Value="25"/>
</Style>
</ControlTemplate.Resources>
<Border >
<DockPanel Margin="10,10,0,10">
<TextBlock Text="{Binding Message}" Width="Auto" TextWrapping="WrapWithOverflow" DockPanel.Dock="Top"
Margin="10"
Foreground="{StaticResource MyMessageBoxForegroundColor}"/>
<DockPanel Margin="5,0,0,0" DockPanel.Dock="Bottom">
<Button Content="Ok" Command="{Binding Close}" ></Button>
<Button Content="Cancel" Command="{Binding Cancel}" HorizontalAlignment="Stretch"></Button>
</DockPanel>
</DockPanel>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Mi CustomDialogWindow es simplemente una ventana sin nada en él:
(XAML)
<Window x:Class="CustomDialogWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="CustomDialogWindow"
SizeToContent="WidthAndHeight">
</Window>
Y en el CustomDialogWindow Tengo el siguiente código para que la ventana se cierra cuando el usuario hace clic cancelar o bien:
Public Class CustomDialogWindow
Private Sub CustomDialogWindow_DataContextChanged(ByVal sender As Object, ByVal e As System.Windows.DependencyPropertyChangedEventArgs) Handles Me.DataContextChanged
Dim dContext As MyDialogViewModel= TryCast(DataContext, MyDialogViewModel)
If dContext IsNot Nothing Then
AddHandler DirectCast(DataContext, MyDialogViewModel).CloseWindow, AddressOf CloseWindow
End If
End Sub
Private Sub CloseWindow()
Me.Close()
End Sub
End Class
Ahora cuando tengo que utilizar la ventana que acaba de crear una instancia de un nuevo CustomDialogWindow, establecer que es DataContext a una nueva instancia de la clase DialogViewModel, y estableció su estilo a la "myMessageStyle":
Dim cdw As New CustomDialogWindow
Dim dvm As New DialogViewModel
dvm.Message = "Hello World!"
cdw.DataContext = dvm
cdw.ShowDialog()
If dvm.WasCancelled = False Then
'....'
End If
la razón por la que me gusta este enfoque se debe a que heredan de la MyDialogViewModel y proporcionar más propiedades de manera que, por ejemplo, yo puede mostrar un montón de opciones para que el usuario pueda elegir. Solo proporciono estilos personalizados para cada tipo de ventana que quiero mostrar (asegurándome de enlazar las propiedades apropiadas). Como dije, es muy flexible y bastante fácil de implementar.
¡Salud!
-Frinny
- 1. ¿Cómo funciona la opción "Solicitar sitio de escritorio" de Chrome?
- 2. WPF tutorial para crear un usuario de control personalizado
- 3. Cómo solicitar al usuario que active GPS_PROVIDER y/o NETWORK_PROVIDER?
- 4. Cómo puedo solicitar grupos en WPF
- 5. Curl para solicitar un nombre de usuario y contraseña
- 6. Cómo crear un panel colapsable en WPF
- 7. Cómo solicitar al usuario los parámetros manuales al ejecutar compilar en Team City?
- 8. C# DialogBox y DialogResult
- 9. ¿Cómo puedo crear un 'pulso' al igual que la interfaz de usuario para una aplicación Android
- 10. ¿Cómo crear contenido tabtable en WPF/C#?
- 11. Cómo crear un nuevo usuario en AWS
- 12. ¿Cómo crear un usuario en Django?
- 13. WPF datagrid ¿permite al usuario agregar filas?
- 14. Alerta al usuario si la sesión va a caducar, opción para renovar la sesión
- 15. a elegir la opción "Generar un activador ..." al crear un nuevo proyecto de plugin Eclipse
- 16. Forzar WPF para crear los elementos en un ItemsControl
- 17. Haga clic para solicitar un acuerdo de licencia
- 18. ¿Es WPF una buena opción para desarrollar interfaces de usuario de líneas de negocio?
- 19. DialogBox depth (z-index) en GWT
- 20. ¿Cómo habilitar al usuario para arrastrar/soltar los controles de usuario de WPF en cualquier lugar de la página?
- 21. ¿Puedo usar la compra integrada en la aplicación iOS para solicitar que el usuario pague?
- 22. Crear un menú vertical en un Wpf
- 23. BASH: ¿Cómo solicitar la entrada del usuario y almacenarla para el futuro?
- 24. ¿Cómo puedo crear un controlador XY como interfaz de usuario en WPF
- 25. ¿Para qué sirve la opción 'sonar' para crear bibliotecas compartidas?
- 26. Opción "Agregar al control de código fuente" al crear un nuevo proyecto C# en VS 2010
- 27. ¿Permitir al usuario crear y modificar la tabla?
- 28. Solicitar autenticación de ADFS
- 29. ¿Cómo crear un editor de formas WPF?
- 30. Crear un proxy INotifyPropertyChanged para enviar llamadas al hilo de la interfaz de usuario
¿Es lo mismo que la aplicación Windows Form? –
Tendrá que usar 'System.Windows.MessageBox'. [Aquí está la documentación de 'MessageBox.Show'] (http://msdn.microsoft.com/en-us/library/ms598703.aspx) en el ejemplo, parte del ensamblado PresentationFramework. – rid