2010-09-07 6 views
0

J'essaye d'écrire un éditeur de texte dans WPF et j'ai un problème en essayant de trouver l'instance correcte d'un éditeur dans un TabControl en réponse à une action Fichier -> Ouvrir .WPF TabControl/Fichier ouvert doit localiser l'enfant WindowsFormsHost

Les éléments d'onglets sont ajoutés par programme et contiennent une instance WindowsFormsHost qui à son tour permet à chaque onglet d'afficher un éditeur fourni par le composant ScintillaNet WinForms. Lorsqu'un onglet est sélectionné et qu'un utilisateur sélectionne Fichier -> Ouvrir, je dois localiser l'instance WindowsFormsHost correcte en fonction de la sélection de l'onglet afin que je puisse charger le fichier dans l'instance Scintilla correcte.

Auparavant, je l'avais fait cela en WinForms simplement en faisant:

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

Comment ça marche dans WPF?

Répondre

0

Pour donner suite au sujet de la solution que je suis allé avec pour l'instant: j'ai décidé de sous-classe de la classe TabItem et détenir une propriété supplémentaire qui fait référence à la commande de WinForms:

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

Et quand j'ajoute de nouveaux onglets, je viens de vous assurer que EditorControl est réglé sur la nouvelle instance de Scintilla qui est créé aussi:

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(); 

maintenant, quand un événement est déclenché, je peux interroger l'onglet sélectionné et as ca st à CustomTabItem afin d'accéder à la référence à l'éditeur concerné:

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

espoir qui aide quelqu'un d'autre.

Questions connexes