2013-01-05 28 views
14

私はElementHostを使用してWinFormでWPFコントロールを表示する必要があることを知っていますが、WPFコントロールはサードパーティのソフトウェアであり、XMLファイルとDLLファイルしか付属していません。このWPFコントロールをWinFormに追加するにはどうすればよいですか?

制御がAvalonEditですが、私は私のプロジェクトの両方ICSharpCode.AvalonEdit.xmlICSharpCode.AvalonEdit.dllファイルを追加した、と私はProject -> Add Referenceに行って、参照としてDLLを追加しました。今度はコード内のICSharpCode名前空間にアクセスできますが、すべてのクラスとメソッドが公開されていますが、この時点から私のWinFormでコントロールを実際に使用する方法は不明です。

私は、ソリューションエクスプローラに表示されるようにWPFコントロールを期待していたが、それはしていません。とにかくElementHostコントロールをWinFormに追加しようとしましたが、ホストされたコンテンツを選択しようとするとコントロールが表示されないため、WPFコントロールについてはわかりません。 WinFormでAvalonEdit WPFコントロールを使用するにはどうすればよいですか?

+3

私の質問を落とした人には、なぜ私の質問が悪いのかを告げるコメントを残せばいいです。 –

答えて

16

あなたは、コントロールがあなたのソリューションの一部である必要があり、設計時にホストされているコンテンツを設定することができるようにしたい場合。これを実現する1つの方法は、使用するAvalonEditコンポーネントを含むカスタムWPFユーザーコントロールを作成することです。すなわち

  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'です。私はそれを試みました、それは' Control'にキャストできないと言います。私はこれを試しました: 'TextEditor editor = new TextEditor(); elementHost1.Child = editor; this.Controls.Add((Control)エディタ); 'なぜこれをコントロールにキャストできないのですか? –

+4

'this.Controls.Add((Control)エディタ)を' 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); 
} 
関連する問題