كيف أقوم بإجراء حوار مشروط لصفحة في تطبيق WPF الخاص بي؟

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

  •  05-07-2019
  •  | 
  •  

سؤال

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

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

المحلول

إذا كنت صائبا في تفسير الرسالة، وتريد أن تعمل شيئا على غرار ما يدل بيلي هوليس في كتابه StaffLynx تطبيق .

وأنا مؤخرا ببناء تحكم مماثلة، واتضح أن هذا النوع من فكرة بسيطة نسبيا لتنفيذ في برنامج الأغذية العالمي. أنا خلقت تحكم مخصص يسمى DialogPresenter. في قالب التحكم لعنصر التحكم المخصص، وأضفت علامات مشابهة لما يلي:

<ControlTemplate TargetType="{x:Type local=DialogPresenter}">
  <Grid>
    <ContentControl>
      <ContentPresenter />
    </ContentControl>
    <!-- The Rectangle is what simulates the modality -->
    <Rectangle x:Name="Overlay" Visibility="Collapsed" Opacity="0.4" Fill="LightGrey" />
    <Grid x:Name="Dialog" Visibility="Collapsed">
      <!-- The template for the dialog goes here (borders and such...) -->
      <ContentPresenter x:Name="PART_DialogView" />
    </Grid>
  </Grid>
  <ControlTemplate.Triggers>
    <!-- Triggers to change the visibility of the PART_DialogView and Overlay -->
  </ControlTemplate.Triggers>
</ControlTemplate>

وأود أيضا أن أضيف طريقة Show(Control view)، الذي يجد في "PART_DialogView"، ويضيف مرت نظرا إلى الخاصية Content.

وهذا بعد ذلك يتيح لي الفرصة لاستخدام DialogPresenter كما يلي:

<controls:DialogPresenter x:Name="DialogPresenter">
  <!-- Normal parent view content here -->
  <TextBlock>Hello World</TextBlock>
  <Button>Click Me!</Button>
</controls:DialogPresenter>

لمعالج أزرار الحدث (أو الأمر المربوطة)، وأنا ببساطة استدعاء الأسلوب مشاهدة () من DialogPresenter.

ويمكنك أيضا بسهولة إضافة ScaleTransform الترميز إلى قالب DialogPresenter للحصول على رفع آثار يظهر في شريط الفيديو. هذا الحل رمز التحكم المخصصة نظيفة ومرتبة، مع واجهة بسيطة جدا لفريق البرمجة UI الخاصة بك.

وآمل أن يساعد هذا!

نصائح أخرى

لدي مشروع على جيثب وهو العرف FrameworkElement الذي يسمح لك بعرض محتوى مشروط على المحتوى الأساسي.

يمكن استخدام عنصر التحكم مثل هذا:

<c:ModalContentPresenter IsModal="{Binding DialogIsVisible}">
    <TabControl Margin="5">
            <Button Margin="55"
                    Padding="10"
                    Command="{Binding ShowModalContentCommand}">
                This is the primary Content
            </Button>
        </TabItem>
    </TabControl>

    <c:ModalContentPresenter.ModalContent>
        <Button Margin="75"
                Padding="50"
                Command="{Binding HideModalContentCommand}">
            This is the modal content
        </Button>
    </c:ModalContentPresenter.ModalContent>

</c:ModalContentPresenter>

سمات:

  • يعرض المحتوى التعسفي.
  • لا يقوم بتعطيل المحتوى الأساسي أثناء عرض المحتوى المشروط.
  • تعطيل وصول الماوس ولوحة المفاتيح إلى المحتوى الأساسي أثناء عرض المحتوى المشروط.
  • يكون مشروطًا فقط بالمحتوى الذي يغطيه، وليس التطبيق بأكمله.
  • يمكن استخدامه بطريقة ودية MVVM عن طريق الارتباط بـ IsModal ملكية.

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

http://deanchalk.com/wpf-modal -controls عليها عبر dispatcherframe-متداخلة-رسالة المضخات /

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

ولست متأكدا أيضا ما إذا كنت أفهم ما هو المقصود حوار مشروط للقيام على الرغم من؟

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