2010-12-01 8 views
9

मुझे एक WPF नियंत्रण में कोई समस्या है जिसे मैं WinForms ऐप में ElementHost में होस्ट करने का प्रयास कर रहा हूं। नियंत्रण एक लापरवाह कस्टम नियंत्रण है जिसे मैंने मूल रूप से एक अलग परीक्षण परियोजना में विकसित किया था, जो एक WPF ऐप था। वहां यह स्पष्ट रूप से ठीक काम करता है, लेकिन मेरे WinForms ऐप में मुझे एक खाली ग्रे बॉक्स मिलता है जहां ElementHost प्रदर्शित होता है।WPF नियंत्रण WinForms ऐप में ElementHost में प्रदर्शित नहीं हो रहा है

// This is my WPF control 
m_TabHostPanel = new TabHostPanel(); 
m_ElementHost = new ElementHost 
       { 
        Child = m_TabHostPanel, 
        Dock = DockStyle.Top, 
        Height = 34 
       }; 
this.Controls.Add(m_ElementHost); 

माता पिता नियंत्रण अन्य WinForms नियंत्रण जोड़े नहीं जाते कि और रनटाइम पर हटा दिया, के रूप में आवश्यक होता है:

यहाँ, बनाने को आबाद करने, और माता पिता के नियंत्रण के लिए ElementHost जोड़ने के लिए मेरी सी # कोड है। ये सभी डॉक स्टाइल टू डॉक स्टाइल के साथ अकेले होस्ट किए जाते हैं। भरें। इस प्रकार, हर बार जब मैं एक जोड़ने मैं जेड आदेश के पीछे ElementHost भेज यकीन है कि इसे सही ढंग से renders बनाने के लिए: इस प्रकार

m_ElementHost.SendToBack(); 

, मुझे पता है मैं एक हवाई क्षेत्र समस्या में नहीं चल रहा हूँ, या ऐसा कुछ उस।

एक बात मैं के बारे में आश्चर्य नहीं किया था यह है: मूल परियोजना में अपने सभी lookless नियंत्रण के लिए शैलियों, App.xaml में आवेदन के लिए संसाधन शब्दकोश में मिला दिया गया इस तरह:

<Application x:Class="WpfTestApp.App" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      StartupUri="MainWindow.xaml"> 
    <Application.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="Application/UserInterface/DataTemplates/TabModelDataTemplate.xaml"/> 
       <ResourceDictionary Source="Application/UserInterface/Styles/HoverablePressableButtonStyle.xaml"/> 
       <ResourceDictionary Source="Application/UserInterface/Styles/MiniControlButtonStyle.xaml"/> 
       <ResourceDictionary Source="Application/UserInterface/Styles/TabCloseButtonStyle.xaml"/> 
       <ResourceDictionary Source="Application/UserInterface/Styles/TabScrollLeftButtonStyle.xaml"/> 
       <ResourceDictionary Source="Application/UserInterface/Styles/TabScrollRightButtonStyle.xaml"/> 
       <ResourceDictionary Source="Application/UserInterface/Styles/TabListDropDownButtonStyle.xaml"/> 
       <ResourceDictionary Source="Application/UserInterface/Styles/TabHostComboBoxStyle.xaml"/> 
       <ResourceDictionary Source="Application/UserInterface/Styles/TabButtonStyle.xaml"/> 
       <ResourceDictionary Source="Application/UserInterface/Styles/TabHostPanelStyle.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Application.Resources> 
</Application> 

मैं मेरे WinForms प्रोजेक्ट में App.xaml माइग्रेट किया गया है, लेकिन बिल्ड एक्शन पेज पर सेट है। यदि मैं इसे एप्लिकेशनडिफिनिशन पर सेट करता हूं तो मुझे यह कहते हुए एक त्रुटि मिलती है कि एप्लिकेशन में एकाधिक प्रविष्टि बिंदु हैं, जो समझ में आता है, लेकिन मैं सोच रहा हूं कि शैलियों, आदि को उठाया जा रहा है। यदि नहीं, तो यह समझा सकता है कि मुझे एक खाली ग्रे आयताकार क्यों मिल रहा है जहां मेरा नियंत्रण होना चाहिए क्योंकि, इनके बिना, इसके स्वरूप को परिभाषित करने के लिए कुछ भी नहीं है। तो शायद सवाल यह है कि, मैं इन शैलियों को अपने WinForms एप्लिकेशन में कैसे प्राप्त करूं ताकि मेरे डब्ल्यूपीएफ नियंत्रण उन्हें देख सकें?

मुझे शायद यह भी उल्लेख करना चाहिए कि यह .NET Fx 3.5 पर चल रहा है।

वैसे भी, क्योंकि अब मैं परेशान हूं, इसलिए किसी भी मदद की सराहना की जाएगी।

बहुत धन्यवाद!

बार्ट

उत्तर

10

जवाब देना लिए धन्यवाद, लेकिन मुझे लगता है कि तुम मुझे गलत हो सकता है: मैं एक कस्टम तत्व, जिसका संसाधनों आवेदन वस्तु में सामान्य रूप से कर रहे हैं का उपयोग करने के आवेदन ही ElementHost में सम्मिलित नहीं कोशिश कर रहा हूँ।

http://drwpf.com/blog/2007/10/05/managing-application-resources-when-wpf-is-hosted/

लघु संस्करण:

  • App.xaml के लिए निर्माण कार्रवाई सेट पृष्ठ
  • App के लिए पीछे कोड में करने के लिए

    सौभाग्य से, मैं एक जवाब मिल गया है। xaml एक डिफॉल्ट कन्स्ट्रक्टर बनाता है जो केवल InitializeComponent()

  • कॉल करता है जब WinForms ऐप शुरू होता है, बस ए का एक उदाहरण बनाएं पीपी वर्ग

और फिर यह सब अच्छा है: मेरा डब्ल्यूपीएफ नियंत्रण ऐसा दिखता है जैसा दिखाना चाहिए।

अब, कारण है कि यह मैं ही जवाब के बाद मैं Stackoverflow लिए पोस्ट किया है लगता है कर रहा है?

धन्यवाद फिर से,

बार्ट

+0

कैसे आप अनुप्रयोग वर्ग का एक नया उदाहरण बना सकता हूँ? – Prof

+0

आप इसे अभी भी नया कर सकते हैं। –

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