2008-10-06 6 views
24

मेरे पास एक WPF विंडो है जिसमें अन्य नियंत्रणों में से एक फ्रेम फ़्रेम होस्ट करता है। उस फ्रेम में मैं अलग-अलग पेज प्रदर्शित करता हूं। क्या केवल एक पृष्ठ में एक संवाद मोडल बनाने का कोई तरीका है? जब मैं संवाद दिखा रहा हूं तो पृष्ठ पर किसी भी नियंत्रण पर क्लिक करना संभव नहीं होना चाहिए, लेकिन पृष्ठ पर नहीं होने वाली उसी विंडो पर नियंत्रण पर क्लिक करना संभव होना चाहिए।मैं अपने डब्ल्यूपीएफ-एप्लिकेशन में किसी पेज के लिए मोडल डायलॉग कैसे करूं?

उत्तर

25

यदि मैं आपका संदेश व्याख्या करने में सही हूं, तो आप Billy Hollis demonstrates in his StaffLynx application के समान काम करते हैं।

मैंने हाल ही में एक समान नियंत्रण बनाया है और यह पता चला है कि इस प्रकार का विचार WPF में लागू करने के लिए अपेक्षाकृत सरल है। मैंने संवाददाता नामक एक कस्टम नियंत्रण बनाया। कस्टम नियंत्रण के लिए नियंत्रण टेम्पलेट में, मैं निम्न के समान मार्कअप कहा:

<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> 

मैं यह भी कहा जो 'PART_DialogView' पाता है, और Content संपत्ति को ध्यान में रखते हुए पारित कर दिया कहते हैं एक Show(Control view) विधि,।

<controls:DialogPresenter x:Name="DialogPresenter"> 
    <!-- Normal parent view content here --> 
    <TextBlock>Hello World</TextBlock> 
    <Button>Click Me!</Button> 
</controls:DialogPresenter> 
बटन ईवेंट हैंडलर (या बाध्य आदेश) के लिए

, मैं बस DialogPresenter की विधि शो() कहते हैं:

यह तो इस प्रकार मुझे DialogPresenter उपयोग करने के लिए अनुमति देता है।

आप वीडियो में दिखाए गए स्केलिंग प्रभाव प्राप्त करने के लिए संवाददाता टेम्पलेट में स्केलट्रांसफॉर्म मार्कअप को आसानी से जोड़ सकते हैं। इस समाधान में साफ और साफ कस्टम नियंत्रण कोड है, और आपके यूआई प्रोग्रामिंग टीम के लिए एक बहुत ही सरल इंटरफ़ेस है।

आशा है कि इससे मदद मिलती है!

+0

हां, मुझे स्टाफ लिंक्स एप्लिकेशन से विचार मिला। मुझे यह डब्ल्यूपीएफ सामान ग्रोक करना वाकई मुश्किल लगता है लेकिन मुझे लगता है कि यह आसान हो जाएगा। संवाद को स्थानांतरित करने के लिए मुझे लगता है कि कुछ और चीजें हैं जिन्हें किया जाना चाहिए। –

+0

निश्चित रूप से - चलने योग्य दृश्य करने के लिए, आप एक कैनवास को प्रतिस्थापित करेंगे जहां हमारे पास "संवाद" नामक ग्रिड है। आपको सभी ड्रैग/ड्रॉप सामान भी करना होगा। इस अवधारणा का एक अच्छा अवलोकन यहां है: http://www.codeproject.com/KB/WPF/DraggingElementsInCanvas.aspx –

+0

हाय ब्रैड, महान उत्तर! क्या आप संवाददाता का पूरा स्रोत कोड साझा करेंगे? मैं इसे अपनी परियोजनाओं में से एक में उपयोग करना पसंद करूंगा। धन्यवाद, जेन्स। – FantaMango77

1

आप यहां एक मॉडल संवाद की तलाश नहीं कर रहे हैं। आपको एक ऐसे फ़ंक्शन की आवश्यकता है जो "पृष्ठ" नियंत्रण अक्षम करे, एक संवाद दिखाए, और संवाद बंद होने पर इसे फिर से सक्षम करें।

मुझे यकीन नहीं है कि क्या आप समझते हैं कि क्या एक मोडल संवाद करने के लिए क्या करना है?

+0

डाउनवोट क्यों? एक मॉडल विंडो एक खिड़की है जो एकमात्र खिड़की है जो उस समय इनपुट के लिए इनपुट स्वीकार कर सकती है। – Mez

4

मैं github पर एक परियोजना है जो एक कस्टम 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> 

विशेषताएं:

  • प्रदर्शित करता है मनमाने ढंग से सामग्री।
  • मॉडल सामग्री प्रदर्शित होने पर प्राथमिक सामग्री को अक्षम नहीं करता है।
  • मोडल सामग्री प्रदर्शित होने पर प्राथमिक सामग्री के लिए माउस और कीबोर्ड पहुंच को अक्षम करता है।
  • केवल उस सामग्री के लिए मोडल है जो इसे कवर कर रहा है, पूरे एप्लिकेशन में नहीं।
  • IsModal संपत्ति पर बाध्यकारी करके एमवीवीएम दोस्ताना तरीके से उपयोग किया जा सकता है।
संबंधित मुद्दे