سؤال

هل يمكن لأي شخص أن يفكر في تفسير جيد لحقيقة أن نتيجة حوار عبارة عن بوول غير قابلة للانفصال في WPF؟ هذا دائما حير لي. في WinForms كان نوع المعمنة والذي جعل الكثير من المنطقي بالنسبة لي.

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

المحلول

في رأيي تم ذلك لأنه في معظم الحالات لا تحتاج إلى المعمم متخصص خيارات مثل إعادة المحاولة أو تجاهلها.

إذا كنت بحاجة إلى أكثر من موافق / إلغاء، فمن المفترض أن تستخدم نوع مربع حوار المهمة، على سبيل المثال مع إجابات مكتوبة. بهذه الطريقة، لا تقتصر على القيم القليلة في القيم التي يفكر فيها شخص ما منذ عقود قبل عدة عقود، والاسترول هو مجرد إيجابي / سلبي للاستخدام الأساسي ويمكنك تطبيق الممتلكات الخاصة بك الخاصة احتياجاتك المتقدمة. لذلك، هناك حاجة إلى True / False فقط، واغتالية تشير إلى أن النافذة لم يتم إغلاقها بعد (لم يتم تعيين قيمة للممتلكات بعد).

إذا كان لديك مربع حوار أكثر من مجرد سؤال، يجب على المستخدم الإجابة (مثل نموذج الدخول)، فأنت أفضل حالا مع موافق / إلغاء "إلغاء"، لذلك لا تحتاج إلى مزيد من القيم.

نصائح أخرى

ال DialogResult يتم تعريف العقار على Window صف دراسي. ليس كل شيء WindowS هي مربعات الحوار. لذلك، فإن العقار غير مناسب لجميع النوافذ. أ Window وقد أظهرت عبر Show() عوضا عن ShowDialog() سوف (يفترض، إلا إذا قمت بتعيينها لسبب ما) DialogResult = null.

إليك مثال بسيط لإظهار:

window1.xaml.:

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <StackPanel>
        <Button Name="b1">Show</Button>
        <Button Name="b2">ShowDialog</Button>
    </StackPanel>
</Window>

window1.xaml.cs.:

using System.Windows;

namespace WpfApplication1
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
            b1.Click += new RoutedEventHandler(b1_Click);
            b2.Click += new RoutedEventHandler(b2_Click);
        }

        void b1_Click(object sender, RoutedEventArgs e)
        {
            var w = new Window();
            w.Closed += delegate
            {
                MessageBox.Show("" + w.DialogResult);
            };

            w.Show();
        }

        void b2_Click(object sender, RoutedEventArgs e)
        {
            var w = new Window();
            w.ShowDialog();
            MessageBox.Show("" + w.DialogResult);
        }
    }
}

عند إغلاق Windows، ستلاحظ أن مربع الحوار لديه DialogResult من false, ، في حين أن غير الحوار لديه null DialogResult.

بالنسبة الى وثائق MSDN.:

Dialogresult هو NULL عند إظهار مربع الحوار ولكن لا يتم قبوله ولا تم إلغاؤه.

لكنني لست متأكدا من كيفية حدوث ذلك إلا إذا كنت تتعامل مع مؤشرات الترابط متعددة الوصول إلى مربع الحوار.

الوثائق تقول إنها خاطئة عندما تحدث أحد الأشياء التالية:

  • اضغط على + F4.
  • النقر على زر إغلاق.
  • يختار إغلاق من قائمة النظام.

سوف showdialog دائما العودة صحيح أو خطأ. لن تأخذ Dialogresult الحالة الفارغة فقط عند فتح مربع الحوار. سيقوم الانتقال من NULL إلى True أو False بإغلاق مربع الحوار وإجراء المكالمة الأصلية إلى إرجاع Reverdialog.

IMO هذا لأن Dialogresult لا يستخدم دائما. ترى، يمكنك فقط تعيين Dialogresult إذا تم استدعاء النافذة بواسطة طريقة ShowDialog ()، إذا قمت بتسميتها باستخدام طريقة عرضها ()، وحاول تعيين Dialogresult إلى أي شيء، فسوف يرمي InvalidOperationException. لذلك أعتقد أن هذا هو السبب في أنه لا يغلى، في حال استدعاء النافذة مع طريقة العرض ()، سيكون فارغا، إذا اتصلت به باستخدام ShowDialog ()، فهو الأمر متروك لك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top