WPF: أفضل طريقة لرفع نافذة منبثقة هي مشروط للصفحة؟

StackOverflow https://stackoverflow.com/questions/429200

  •  06-07-2019
  •  | 
  •  

سؤال

أقوم بإنشاء تطبيق WPF باستخدام صفحات نمط التنقل وليس Windows. أريد أن أعرض نافذة داخل صفحة ، يجب أن تكون هذه النافذة مشروطة بالصفحة ، ولكن اسمح للمستخدم بالانتقال إلى صفحة أخرى ، والعودة إلى نفس الصفحة مع النافذة المشروطة في نفس الحالة.

لقد حاولت مع التحكم في WPF المنبثقة ولكن المشكلة هي أن عنصر التحكم يختبئ في كل مرة تتنقل فيها بعيدًا عن الصفحة. أظن أنه يمكنني كتابة الكود لإظهاره مرة أخرى ، لكن لا يفسد الطريق الصحيح.

ما هي أفضل طريقة للقيام بذلك في WPF؟

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

المحلول

هذه stackoverflow إجابة قد تساعدك في طريقك. لقد قمت بإنشاء بعض الكود النموذج الذي طلبه بعض المستخدمين الآخرين. لقد أضفت هذا إلى منشور مدونة هنا.

أتمنى أن يساعدك هذا!

نصائح أخرى

لماذا لا تستخدم فقط مضخات الرسائل المتداخلة لإنشاء عناصر تحكم مشروط

http://www.deanchalk.com/wpf-modal-controls-via-dispatcherframe-message-pumps/

يمكنك عمل فئة منبثقة تستخدم طبقة المزين لوضع نفسها على كل شيء آخر.

اصنع فصلًا أساسيًا لـ POPUP الخاص بك يحتوي على خاصية تسمى مفتوح وعندما يتم تغييره ، قم بتعيين وضوح عناصر التحكم في القيمة المناسبة.

لإيقاف عناصر التحكم التي تقع تحت النقر فوق المنبثقة ، يمكنك جعل المنبثقة تأخذ الحجم الكامل للصفحة. سيكون لديك في الغالب شفافة باستثناء منتصف Actuall حيث النافذة المنبثقة. إذا كنت ترغب في أن تكون شفافية تمامًا على المنبثقة ، فستحتاج إلى تجاوز HitTestcore على المنبثقة الخاصة بك.

شيء من هذا القبيل:

protected override HitTestResult HitTestCore(PointHitTestParameters hitTestParameters)
{
    // We want this control to behaive as a single rectangle and we don't much care
    // whether or it has a solid background.  So we override this method so we can have    // mouse over info for the entire panel regardless of background.

    // run the base hit test first, because if it finds something we don't want to overrule it.
    HitTestResult result = base.HitTestCore(hitTestParameters);


    // If we didn't get a hit generate a new hit test result, because HitTestCore is never called unless
    // the mouse is over the controls bounding rectangle.
    if (result == null)
        result = new PointHitTestResult(this, hitTestParameters.HitPoint);

    return result;
}

آمل أن يوجهك هذا في الاتجاه الصحيح.

لا يحب Windows أن تفعل ذلك - إنه ليس شيئًا WPF. استخدم لوحة مغلقة واستخدم الخاصية المرئية أو zorder.

ويكيبيديا لديه مناقشة جيدة.

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