2011-09-29 16 views
8

डब्ल्यूपीएफ वास्तव में मुझे यहां मेरे नसों से बाहर कर रहा है। मैंने कुछ जटिल सामग्री (ग्रिड, बटन इत्यादि) के साथ एक पॉपअप कॉन्फ़िगर किया। मैंने अपनी StaysOpen प्रॉपर्टी को एक टेक्स्टबॉक्स माउसडाउन पूर्वावलोकन ईवेंट पर गलत और IsOpen से True पर सेट किया है।पॉपअप कभी बंद नहीं होता

यह बात यह है कि यह खुलती है लेकिन विंडो के बाहर कहीं भी क्लिक करते समय कभी बंद नहीं होती है।

कोई सुझाव?

धन्यवाद!

अद्यतन:

मेरे पॉपअप बटन के अंदर है। जब मैं उनमें से किसी एक पर क्लिक करता हूं, तो पॉपअप बंद हो जाता है जब मैं इसके बाहर क्लिक करता हूं। घटनाओं के लिए कुछ अजीब चीजें हो रही हैं?

+0

क्या आपने इसे बंद करने की कोशिश की है जैसे कि आपके पास कोई बंद बटन है? या पॉपअप esc करने के लिए ईएससी कुंजी की तरह एक कुंजी मैप करें। –

+0

मैं इसे ऐसा कर सकता हूं .. लेकिन मुझे फोकस खोने पर इसे स्वचालित रूप से बंद करने की आवश्यकता है। –

+0

क्या आप सरल XAML जोड़ सकते हैं जो इस समस्या का प्रदर्शन करता है (आपको डीबगिंग में भी मदद कर सकता है)? –

उत्तर

4

ऐसा लगता है कि पॉपअप किसी अन्य नियंत्रण ईवेंट द्वारा खोले जाने पर बंद नहीं होगा। मैंने बस एक combobox अनुकरण करने के लिए एक ToggleButton की Ischecked संपत्ति के लिए IsOpen संपत्ति बांध दिया।

आपके सभी उत्तरों के लिए धन्यवाद।

+0

मैं सहमत हूं, वही बात मेरे लिए काम करती है। अजीब व्यवहार, लेकिन काम किया। कोड में IsOpenProperty के लिए एक टॉगल बटन IsChecked संपत्ति के लिए बाध्यकारी बनाया गया है और यह ठीक काम किया। मैं इसे ले जाऊँगा :) – TravisWhidden

0

मैंने एक टेक्स्टबॉक्स माउसडाउन पूर्वावलोकन ईवेंट पर IsOpen सेट किया है।

इसे किस पर सेट करें? और टेक्स्टबॉक्स होस्ट किया गया है?

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

+0

टेक्स्टबॉक्स एक उपयोगकर्ता नियंत्रण में है जो विंडो में उपयोग किया जाता है। उपयोगकर्ता नियंत्रण में जब भी टेक्स्टबॉक्स क्लिक किया जाता है तो मैं IsOpen = true सेट कर रहा हूं। जब पॉपअप फोकस खो देता है तो यह कभी बंद नहीं होता है। –

0

आप पॉपअप के LostFocus ईवेंट का उपयोग कर सकते हैं। यदि फोकस पॉपअप के भीतर नहीं है, तो इसे बंद करने के लिए झूठ में IsOpen सेट करें।

+0

यह कुछ भी नहीं करता है। यदि मैं पॉपअप IsOpen संपत्ति के साथ विंडो को सत्य पर सेट करता हूं तो यह सामान्य रूप से काम करता है। अगर मैं इसे टेक्स्टबॉक्स पूर्वावलोकनमाउसबटन डाउन इवेंट पर सेट करता हूं तो यह काम नहीं करता है। –

0

मुझे बटन के पूर्वावलोकनMouseButtonUp ईवेंट को छोड़कर, यह समस्या भी हो रही थी। धारणा है कि पॉपअप के साथ कुछ बग है और टनलिंग घटनाओं में उन्हें खोलने की कोशिश कर रहा था, और मुझे ठीक करने के लिए रास्ता तय किया (जो थोड़ा अधिक सामान्य है)।

मुझे हल करने की घटनाओं को पकड़ने के लिए विशेष रूप से AddHandler(RoutedEvent,Delegate,Boolean) विधि के साथ सुरंग घटना के बजाए बुलबुले घटना को सुनकर (होस्ट नियंत्रण सामान्य/कई प्रकार के नियंत्रण हो सकता है) को हल करने की आवश्यकता होती है।

डब्ल्यूएजी यह समस्या कहीं भी स्थित है जब सुरंग से बुलबुले में संक्रमण होता है।

0

मैं पॉपअप को प्रारंभ करने के लिए कोड का उपयोग करता हूं, और मुझे पता चला है कि अगर माउस ईवेंट जैसे अन्य यूआई एक्शन से सिंक चलाया गया तो यह बंद नहीं है। इसे हल करने के लिए मैं इसे एसिंक चलाता हूं:

public static void ShowPopupMessage(string message) 
    { 
     DispatcherHelper.UIDispatcher.BeginInvoke(new Action(() => 
     { 
      var popup = new Popup 
      { 
       Child = new AutoHideMessage(message), 
       StaysOpen = false, 
       IsOpen = true 
      }; 
     })); 
    } 
संबंधित मुद्दे