2010-02-19 3 views
6

क्या एक WPF फॉर्म के भीतर किसी प्रकार के कंटेनर या रैपर प्रकार नियंत्रण के भीतर एक पूर्ण WinForms फॉर्म (केवल एक ही नियंत्रण नहीं) होस्ट/प्रदर्शित करने का कोई तरीका है? मैं एचटीएमएल में php या iframe से वर्चुअल में अवधारणा के समान कुछ ढूंढ रहा हूं। संभवतः इसे ओसीएक्स या डीएलएल में संकलित करके।क्या एक कंटेनर/रैपर के माध्यम से एक WPF फॉर्म के भीतर WinForm फ़ॉर्म होस्ट करना संभव है?

उत्तर

6

मेरे ज्ञान के लिए आप WPF में एक वास्तविक WinForms फॉर्म होस्ट नहीं कर सकते हैं।

हालांकि एक अच्छा विकल्प WinForms (एक विंडोज फॉर्म कंट्रोल लाइब्रेरी प्रोजेक्ट के रूप में) में एक सामान्य UserControl बनाने के लिए है जिसमें सभी आवश्यक कार्यक्षमता और बाल नियंत्रण शामिल हैं।

फिर अपने WPF प्रोजेक्ट में, WindowsFormsIntegration.dll का संदर्भ लें (जोड़ें संदर्भों के .NET टैब में होना चाहिए)।

फिर WinForms UserControl युक्त असेंबली का भी संदर्भ लें और अंततः XAML में WindowsFormsHost कंटेनर जोड़ें।

अधिक जानकारी के लिए Sacha Barber द्वारा useful tutorial देखें।

1

पता चलता है कि कैसे WinForms पर एक नियंत्रण के रूप में एक exe की मेजबानी के लिए CodeProject पर एक लेख है (यह एक आवेदन टैब पृष्ठों का उपयोग करता है, यह पर एक Winform.exe खींचें है, यह उस में उस खिड़की के साथ एक tabpage बनाता है) , इस आलेख से here से व्युत्पन्न। मुझे पता है कि आपने विशेष रूप से डब्ल्यूपीएफ के लिए पूछा है, लेकिन शायद आपको सही दिशा में ले जाया जा सकता है?

उम्मीद है कि यह मदद करता है, सर्वश्रेष्ठ संबंध, टॉम।

+0

इस के साथ जा रहा खत्म नहीं हुई है, लेकिन यह है एक अद्भुत उपकरण। लिंक के लिए धन्यवाद। – jasonk

16

आप निम्नलिखित कोड के साथ कर सकते हैं:

अपने XAML में:

<WindowsFormsHost name="wfHost" /> 

में अपने कोड-पीछे:

Form foo = new Form(); 
foo.TopLevel = false; 
foo.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; 
wfHost.Child = foo; 
+1

+1, छोटे ज्ञात 'टॉपलेवल'। * माइक्रोसॉफ्ट एक्सेस * जैसे "सब-फॉर्म" कार्यक्षमता को डुप्लिकेट करने के लिए * .NET कॉम्पैक्ट 1.1 * में ऐसा करने के लिए प्रयुक्त होता है। – AMissico