سؤال

في System.Windows.نماذج.زر هناك خاصية dialogresult, ، أين هي هذه الخاصية في System.Windows.ضوابط.زر (WPF)؟

هل كانت مفيدة؟

المحلول

لا يوجد زر مدمج.

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

سيسمح لك هذا بالكتابة:

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

والحصول على السلوك المكافئ لـ WinForms (النقر فوق الزر يؤدي إلى إغلاق مربع الحوار وإرجاع النتيجة المحددة)

نصائح أخرى

لا يوجد Button.DialogResult في WPF. عليك فقط تعيين ملف DialogResult التابع Window إلى صواب أو خطأ:

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

فقط تأكد من أنك عرضت النموذج باستخدام ShowDialog عوضا عن Show. إذا قمت بذلك ، فستحصل على الاستثناء التالي الذي أثير:

كان invalidoperationException غير معلم

لا يمكن تعيين Dialogresult إلا بعد إنشاء النافذة وعرضها كمربع حوار.

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

if (result == MessageBoxResult.Yes)
{
// CODE IN HERE
}
else 
{
// CODE IN HERE
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top