2009-11-18 15 views

Respuesta

30

No hay está incorporado Button.DialogResult, si bien puede crear su propia cuenta (si lo desea) usando un simple propiedad adjunta:

public class ButtonHelper 
{ 
    // Boilerplate code to register attached property "bool? DialogResult" 
    public static bool? GetDialogResult(DependencyObject obj) { return (bool?)obj.GetValue(DialogResultProperty); } 
    public static void SetDialogResult(DependencyObject obj, bool? value) { obj.SetValue(DialogResultProperty, value); } 
    public static readonly DependencyProperty DialogResultProperty = DependencyProperty.RegisterAttached("DialogResult", typeof(bool?), typeof(ButtonHelper), new UIPropertyMetadata 
    { 
    PropertyChangedCallback = (obj, e) => 
    { 
     // Implementation of DialogResult functionality 
     Button button = obj as Button; 
     if(button==null) 
      throw new InvalidOperationException(
      "Can only use ButtonHelper.DialogResult on a Button control"); 
     button.Click += (sender, e2) => 
     { 
     Window.GetWindow(button).DialogResult = GetDialogResult(button); 
     }; 
    } 
    }); 
} 

Esto le permitirá escribir:

<Button Content="Click Me" my:ButtonHelper.DialogResult="True" /> 

y obtener un comportamiento equivalente al de Windows Forms (haciendo clic sobre el botón hace que el diálogo para cerrar y devolver el resultado especificado)

+0

¡Aprendí cosas nuevas aquí, este attaching, eventho no voy a usarlo en este caso, seguro que será útil! muchas gracias – Shimmy

+0

Nunca supe del Func GetWindow, ¡eso es simplemente increíble! – Shimmy

+0

Una gran solución, hecha mayor en su simplicidad. –

17

No hay Button.DialogResult en WPF. Sólo tienes que configurar el DialogResult del Window a verdadero o falso:

private void buttonOK_Click(object sender, RoutedEventArgs e) 
{ 
    this.DialogResult = true; 
} 
+2

@Shimmy: Esto debería ser aceptado en realidad ... – Mangesh

1

Sólo asegúrese de que usted ha mostrado el formulario utilizando ShowDialog en lugar de Show. Si hace esto último que obtendrá la siguiente excepción planteó:

InvalidOperationException fue controlada

DialogResult sólo puede ajustarse una vez creada la ventana y muestra como diálogo.

-4
MessageBoxResult result = MessageBox.Show("",""); 

if (result == MessageBoxResult.Yes) 
{ 
// CODE IN HERE 
} 
else 
{ 
// CODE IN HERE 
} 
+2

'MessageBoxResult result = new MessageBoxResult();' I lol'd – Will

+0

Este código ni siquiera funcionará ... 'MessageBox.Show (" "," ");' no mostrará Sí | No botones. – qJake