17

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

コントロールはAvalonEditICSharpCode.AvalonEdit.xmlで、プロジェクトにとICSharpCode.AvalonEdit.dllファイルの両方をProject -> Add Reference追加し、参照としてDLLに移動して追加しました。これで、コード内の名前空間にアクセスできICSharpCode、すべてのクラスとメソッドが公開されますが、この時点から、WinFormで実際にコントロールを使用する方法がわかりません。

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

4

3 に答える 3

20

設計時にホストされたコンテンツを設定できるようにする場合は、コントロールをソリューションの一部にする必要があります。これを実現する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を交換してください。

于 2013-01-05T09:04:03.310 に答える
10

コードの色付け/構文の強調表示を行う方法の例も必要になります。

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);
}
于 2013-05-07T00:01:09.317 に答える