0

TabControlWPFでテキストエディターを作成しようとしていますが、[ファイル]-> [開く]アクションに応答して、内のエディターの正しいインスタンスを見つけようとして問題が発生します。

タブアイテムはプログラムで追加され、WindowsFormsHostインスタンスが含まれています。これにより、各タブでScintillaNetWinFormsコンポーネントによって提供されるエディターを表示できます。

タブが選択され、ユーザーが[ファイル]-> [開く]を選択した場合、ファイルを正しいScintillaインスタンスにロードできるように、タブの選択に基づいて正しいWindowsFormsHostインスタンスを見つける必要があります。

以前は、WinFormsで次の操作を行うだけでこれを実行していました。

tabControl.TabPages[tabControl.SelectedIndex].Controls.Find("Scintilla")

これはWPFでどのように機能しますか?

4

1 に答える 1

0

今のところ行った解決策についてフォローアップするには:TabItemクラスをサブクラス化し、WinForms ScintillaNet コントロールを参照する追加のプロパティを保持することにしました。

public class CustomTabItem : TabItem
{
    public Scintilla EditorControl
    {
        get; set;
    }
}

そして、新しいタブを追加するときは、それも作成さEditorControlれた新しいインスタンスに設定されていることを確認してください:Scintilla

var editor = ScintillaFactory.Create();

var tab = new CustomTabItem()
{
     Header = "Untitled",
     Content = new WindowsFormsHost() { Name = "WinformsHost", Child = editor },
     EditorControl = editor
};

tabControl.Items.Add(tab);
tab.Focus();

イベントが発生すると、選択したタブをクエリしてasキャストしCustomTabItem、それぞれのエディターへの参照にアクセスできます。

var editor = (tabControl.Items[tabControl.SelectedIndex] as CustomTabItem).EditorControl
editor.Text = "text here";

それが他の誰かを助けることを願っています。

于 2010-09-07T15:32:13.993 に答える