2010-05-14 1 views

Répondre

0

Il est très simple:

var item = TreeView.ItemContainerGenerator.ContainerFromIndex(...); 
var header = ((TreeViewItem)item).Header; 

Cependant, il ne peut être une bonne idée: En général, tout code qui nécessite un accès au contrôle d'en-tête lui-même (par opposition au modèle) est mal écrit et devrait être réécrit pour utiliser la liaison de données à la place.

+0

Merci. Mais l'en-tête contient mon modèle non contrôlé. J'ai besoin de contrôles, car je dois changer une valeur de contrôle. Pourquoi je ne veux pas changer de modèle? Parce que j'ai besoin d'une fonctionnalité qui soit large, pas de modèle. Cette fonctionnalité est en cours d'édition du texte TreeViewItem.Header, je dois permuter TextBlock au contrôle TextBox. – zielu1

+0

Vous pouvez échanger un TextBlock avec un TextBox en utilisant la liaison de données de plusieurs façons. En général, j'ai juste un drapeau tel que "InPlaceEditing" dans mon modèle de vue, et j'utilise un déclencheur de données dans votre modèle pour permuter le TextBlock pour le TextBox. Quelques autres solutions que j'ai utilisées sont: 1. Utiliser une propriété attachée pour échanger automatiquement le modèle, ce qui était bon pour changer une interface utilisateur entière à la fois, et 2. Utiliser une liaison avec un convertisseur pour définir le modèle du contrôle. WPF a tellement de mécanismes puissants pour contrôler cela via la liaison de données qu'il serait presque un crime de ne pas les utiliser. –