¿Dónde está el botón. Dialogresult en WPF?
-
20-09-2019 - |
Pregunta
En System.Windows.Formularios.Botón Hay una propiedad Dialogrima, ¿Dónde está esta propiedad en el System.Windows.Control S.Botón (WPF)?
Solución
No hay botón incorporado.
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 obtenga un comportamiento equivalente a Winforms (hacer clic en el botón hace que el cuadro de diálogo cierre y devuelva el resultado especificado)
Otros consejos
No hay Button.DialogResult
En WPF. Solo tienes que configurar el DialogResult
del Window
a verdadero o falso:
private void buttonOK_Click(object sender, RoutedEventArgs e)
{
this.DialogResult = true;
}
Solo asegúrese de que haya mostrado el formulario usando ShowDialog
más bien que Show
. Si haces lo último, obtendrás la siguiente excepción planteada:
InvalioperationException no estaba controlada
El dialogresult se puede configurar solo después de que la ventana se crea y se muestra como diálogo.
MessageBoxResult result = MessageBox.Show("","");
if (result == MessageBoxResult.Yes)
{
// CODE IN HERE
}
else
{
// CODE IN HERE
}