Frage

Im System.Windows.Formen.Taste Es gibt eine Immobilie Dialogresult, wo ist diese Eigenschaft in der System.Windows.Kontrollen.Taste (WPF)?

War es hilfreich?

Lösung

Es gibt keine integrierte Taste. Dialogresult, aber Sie können Ihre eigene (falls möchten) mit einer einfachen beigefügten Eigenschaft erstellen:

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);
      };
    }
  });
}

Auf diese Weise können Sie schreiben:

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

und erhalten Sie Verhaltensmittel entsprechen den WinForms (Klicken auf die Schaltfläche führt dazu, dass das Dialogfeld das angegebene Ergebnis schließt und zurückgibt).

Andere Tipps

Es gibt kein Button.DialogResult in WPF. Sie müssen nur das festlegen DialogResult des Window zu wahr oder falsch:

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

Stellen Sie einfach sicher, dass Sie das Formular verwendet haben ShowDialog statt Show. Wenn Sie letzteres tun, erhalten Sie die folgende Ausnahme:

InvalidOperationException wurde nicht behandelt

Dialogresult kann erst festgelegt werden, nachdem das Fenster als Dialog erstellt und angezeigt wurde.

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

if (result == MessageBoxResult.Yes)
{
// CODE IN HERE
}
else 
{
// CODE IN HERE
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top