WPF TabControl / File open需要找到子WindowsFormsHost

时间:2010-09-07 13:43:01

标签: wpf windowsformshost

我正在尝试在WPF中编写一个文本编辑器,我在尝试在TabControl内找到正确的编辑器实例时遇到问题,以响应文件 - >公开行动。

选项卡项以编程方式添加并包含WindowsFormsHost实例,该实例又允许每个选项卡显示由ScintillaNet WinForms组件提供的编辑器。

当选择标签并且用户选择文件 - >打开,我需要根据选项卡选择找到正确的WindowsFormsHost实例,这样我就可以将文件加载到正确的Scintilla实例中。

以前,我只是通过以下方式在WinForms中完成此操作:

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

这在WPF中如何运作?

1 个答案:

答案 0 :(得分: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";

希望能帮助别人。