2011-08-26 22 views
12

मेरे पास एक WPF-Window है जो मैं बंद नहीं करता हूं। इसके बजाय मैं छुपाता हूं() और दिखाएं()। अब, जब मैं एक रिकॉर्ड पर ग्रिड में अपने मेनविंडो में डबलक्लिक करता हूं, जो खिड़की को दिखाने के लिए ट्रिगर करेगा, विंडो हमेशा मेनविंडो के पीछे दिखाई देगी। मैं fallowing की कोशिश की है, लेकिन कोई सफलता के साथ:WPF - विंडो को सामने लाएं

view.Show(); 
view.Activate(); 
view.Topmost = true; 
view.Topmost = false; 
view.Focus();  

वहाँ एक और तरीका है जो मैं सामने खिड़की absolut लाने के लिए उपयोग कर सकते हैं है? मैं मेनविंडो को मालिक के रूप में सेट नहीं कर सकता।

+1

आप करने जा रहे हैं कर देगा "मैं मेनविंडो को मालिक के रूप में सेट नहीं कर सकता" पर विस्तार करना है। – vcsjones

+0

मैं मेनविंडो को अपने विचार के रूप में स्वामी के रूप में सेट नहीं करूँगा क्योंकि विंडोज के बीच कोई संबंध नहीं है। और मुझे इनमें से कई खिड़कियां खोलने में सक्षम होना चाहिए। – BennoDual

+2

संभावित डुप्लिकेट [डब्ल्यूपीएफ में सामने की ओर एक खिड़की लाएं] (http://stackoverflow.com/questions/257587/bring-a-window-to-the-front-in-wpf) – CodeNaked

उत्तर

27

Window.Activate जाने का तरीका है (यदि आप मालिक को सेट नहीं करना चाहते हैं)। यदि यह काम नहीं करता है (जैसा कि आप वर्णन करते हैं), तो किसी अन्य स्थान पर एक त्रुटि है। हो सकता है कि आपके मेनविंडो में TopMosttrue पर सेट हो? या आपके पास एक स्थगित कॉल है जो आपकी मुख्य विंडो या नियंत्रण में केंद्रित है?

किसी अन्य उत्तर में प्रस्तावित शोडियलॉग() को कॉल करना एक विकल्प नहीं है जब तक कि आप चाहते हैं कि पूरा ऐप अवरुद्ध नहीं हो जाता है जब तक कि मोडल खुली खिड़की बंद न हो जाए।

Win32-Api में error है जो WPF अगर विंडो-प्रबंधन को प्रभावित करता है, लेकिन आपकी समस्या का वर्णन इस तरह नहीं लगता है।

साथ ही यहां एक हैक है, लेकिन मुझे आशा है कि आप इसकी आवश्यकता नहीं है:

Dispatcher.BeginInvoke(new Action(delegate {  
     view.Activate(); 
     }), System.Windows.Threading.DispatcherPriority.ContextIdle, null); 
+0

धन्यवाद, केवल इस समाधान ने हल किया है मेरे लिए समस्या का वर्णन किया। – Sevenate

4

शो के बजाय शोडियलॉग विंडो को हमेशा शीर्ष पर प्रदर्शित करने की अनुमति देगा।

+0

+1 शायद जवाब! – CharithJ

+3

मुझे नहीं लगता कि यह जवाब है, जब तक कि ओपी अन्य खिड़कियों को तब तक अवरुद्ध नहीं करना चाहता जब तक कि अतिरिक्त खुली खिड़की खुली न हो। मेरे लिए सवाल ऐसा नहीं लगता है। – HCL

+0

वह इसे शीर्ष पर ले जाना चाहता है, इसे मॉडल न बनाएं। – Oli

2
myWindow.WindowState = WindowState.Normal; 

वह मेरे लिए काम किया।

1

मुझे एक ही समस्या थी - मैं एक माउस डब्लूएलक्लिक घटना से मालिक के सेट के साथ एक विंडो दिखा रहा था।

e.Handled = true

मेरी घटना कोड पूरा करने से पहले: मैं (अंततः) है कि मैं स्थापित करने के लिए की जरूरत का एहसास हुआ। निम्न Microsoft दस्तावेज़ की रूपरेखा आप जब यह एक "महत्वपूर्ण और अपेक्षाकृत पूरा रास्ता" में प्रतिक्रिया करता है के रूप में व्यवहार एक घटना में चिह्नित करना चाहते हो सकता है कि:

http://msdn.microsoft.com/en-us/library/ms747183.aspx

यह व्यक्तिपरक है, लेकिन मेरे मामले में यह खिड़की को रोकने की गई थी मैं बस उपयोगकर्ता को दिखाई देने से खोला।

1

मैं एक समान मुद्दे से गुजर गया और अन्य उत्तरों के संयोजन का उपयोग करके समाधान मिला। एक बार जब खिड़की छिपा हुआ है मैं निम्नलिखित कोड के साथ अग्रभूमि में रख:

view.WindowState = WindowState.Normal; 
    view.Activate(); 

नोट: खिड़की छिपने से पहले अधिकतम गया था, तो उस कोड पर वह वापस आ के रूप में अधिकतम

+0

यह मेरे लिए काम किया, और सीधे सीधे सक्रिय नहीं किया। सुझाव के लिए बहुत बहुत धन्यवाद! – ravuya

संबंधित मुद्दे