WPF TabControl / Открыть файл должен найти дочерний WindowsFormsHost - PullRequest
0 голосов
/ 07 сентября 2010

Я пытаюсь написать текстовый редактор в WPF, и у меня возникает проблема при попытке найти правильный экземпляр редактора в TabControl в ответ на действие Файл -> Открыть.

Вкладкаэлементы добавляются программно и содержат экземпляр WindowsFormsHost, который, в свою очередь, позволяет каждой вкладке отображать редактор, предоставляемый компонентом ScintillaNet WinForms.

Когда вкладка выбрана и пользователь выбирает Файл -> Открыть, мне нужнонайти правильный экземпляр WindowsFormsHost на основе выбора вкладки, чтобы я мог загрузить файл в правильный экземпляр Scintilla.

Раньше я делал это в WinForms просто выполнив:

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

Как это работает в WPF?

1 Ответ

0 голосов
/ 07 сентября 2010

Чтобы узнать о решении, с которым я сейчас остановился: я решил создать подкласс класса 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";

Надеюсь, это поможет кому-то еще.

...