2010-09-07 1 views
0

Я пытаюсь написать текстовый редактор в WPF, и у меня есть проблема с поиском правильного экземпляра редактора в TabControl в ответ на действие File -> Open ,WPF TabControl/File open необходимо найти ребенка WindowsFormsHost

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

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

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

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

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

ответ

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"; 

Надежда, что помогает кому-то еще.