2013-01-05 26 views
14

मुझे पता है कि मुझे WinForm में एक WPF नियंत्रण प्रदर्शित करने के लिए ElementHost का उपयोग करना होगा, लेकिन WPF नियंत्रण तृतीय पक्ष सॉफ़्टवेयर है और यह केवल एक XML फ़ाइल और एक DLL फ़ाइल के साथ आता है।मैं अपने WinForm में यह WPF नियंत्रण कैसे जोड़ सकता हूं?

नियंत्रण AvalonEdit है, मैं अपने प्रोजेक्ट के लिए दोनों ICSharpCode.AvalonEdit.xml और ICSharpCode.AvalonEdit.dll फ़ाइलें जोड़ी है, और मैं Project -> Add Reference के पास गया और एक संदर्भ के रूप DLL गयी। अब मैं अपने कोड में ICSharpCode नेमस्पेस तक पहुंच सकता हूं, सभी वर्गों और विधियों का खुलासा किया गया है, लेकिन इस बिंदु से मुझे यकीन है कि वास्तव में मेरे WinForm में नियंत्रण का उपयोग कैसे किया जाए।

मैं समाधान एक्सप्लोरर में एक WPF नियंत्रण प्रकट होने की उम्मीद कर रहा था, लेकिन ऐसा नहीं है। मैंने अपने WinForm को किसी भी तरह ElementHost नियंत्रण जोड़ने का प्रयास किया, लेकिन जब मैं होस्ट की गई सामग्री का चयन करने का प्रयास करता हूं, तो कोई नियंत्रण नहीं दिखाई देता है, इसलिए यह मेरे WPF नियंत्रण के बारे में नहीं जानता है। मैं अपने WinForm में AvalonEdit WPF नियंत्रण का उपयोग कैसे कर सकता हूं?

+3

मेरे प्रश्न को कम करने वाले व्यक्ति को, यह अच्छा होगा अगर आप मुझे एक टिप्पणी छोड़ सकें कि मेरा प्रश्न खराब क्यों है। –

उत्तर

16

यदि आप डिज़ाइन समय पर होस्ट की गई सामग्री को सेट करने में सक्षम होना चाहते हैं तो नियंत्रण को आपके समाधान का हिस्सा बनने की आवश्यकता है। इसे प्राप्त करने का एक तरीका कस्टम WPF उपयोगकर्ता नियंत्रण बनाना है जिसमें AvalonEdit घटक शामिल है जिसका आप उपयोग करना चाहते हैं। यानी

  1. एक WPF उपयोगकर्ता नियंत्रण पुस्तकालय परियोजना बनाएँ और एक उपयोगकर्ता नियंत्रण AvalonEdit घटक युक्त पैदा करते हैं।

  2. उपयोगकर्ता नियंत्रण प्रोजेक्ट को अपने Winforms समाधान में जोड़ें।

अब आप होस्ट किए गए सामग्री के रूप में अपना नया उपयोगकर्ता नियंत्रण चुनने में सक्षम होना चाहिए।

या आप AvalonEdit नियंत्रण सीधे कोड में इस तरह जोड़ सकते हैं:

public Form1() 
{ 
    InitializeComponent(); 

    ElementHost host= new ElementHost(); 
    host.Size = new Size(200, 100); 
    host.Location = new Point(100,100); 

    AvalonEditControl edit = new AvalonEditControl(); 
    host.Child = edit; 

    this.Controls.Add(host); 
} 

सुनिश्चित नहीं हैं कि नियंत्रण इसलिए कहा जाता है के रूप में उपयुक्त AvalonEditControl बदलें।

+2

नियंत्रण का नाम 'AvalonEdit.TextEditor' है, और मैंने कोशिश की, यह कहता है कि इसे 'नियंत्रण' में नहीं डाला जा सकता है। मैंने यह कोशिश की: 'TextEditor संपादक = नया टेक्स्ट एडिटर(); elementHost1.Child = संपादक; यह। नियंत्रण। जोड़ें ((नियंत्रण) संपादक); 'इसे नियंत्रण में क्यों नहीं डाला जा सकता है? –

+4

'this.Controls.Add ((नियंत्रण) संपादक)' to 'this.Controls.Add (elementHost1)' –

+0

ओहह, मैंने अनदेखा किया कि आपने मेजबान जोड़ा है, नियंत्रण नहीं। वह चाल है !! आपको बहुत - बहुत धन्यवाद! –

7
public Form1() 
{ 
    InitializeComponent(); 
    ICSharpCode.AvalonEdit.TextEditor textEditor = new ICSharpCode.AvalonEdit.TextEditor(); 
    textEditor.ShowLineNumbers = true; 
    textEditor.FontFamily = new System.Windows.Media.FontFamily("Consolas"); 
    textEditor.FontSize = 12.75f; 

    string dir = @"C:\Temp\"; 
    #if DEBUG 
    dir = @"C:\Dev\Sandbox\SharpDevelop-master\src\Libraries\AvalonEdit\ICSharpCode.AvalonEdit\Highlighting\Resources\"; 
    #endif 

    if (File.Exists(dir + "CSharp-Mode.xshd")) 
    { 
     Stream xshd_stream = File.OpenRead(dir + "CSharp-Mode.xshd"); 
     XmlTextReader xshd_reader = new XmlTextReader(xshd_stream);  
     // Apply the new syntax highlighting definition. 
     textEditor.SyntaxHighlighting = ICSharpCode.AvalonEdit.Highlighting.Xshd.HighlightingLoader.Load(xshd_reader, ICSharpCode.AvalonEdit.Highlighting.HighlightingManager.Instance); 
     xshd_reader.Close(); 
     xshd_stream.Close(); 
    } 
    //Host the WPF AvalonEdiot control in a Winform ElementHost control 
    ElementHost host = new ElementHost(); 
    host.Dock = DockStyle.Fill; 
    host.Child = textEditor; 
    this.Controls.Add(host); 
} 

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

  • कोई संबंधित समस्या नहीं^_^