J'ai une liste de "pages" personnalisées dans mon application. Chaque page représente une vue d'interface utilisateur différente. Ils ont des propriétés simples, comme un titre de chaîne et une icône, mais ils ont également un certain nombre de propriétés complexes, consistant en des contrôles à insérer dans la barre d'outils principale, une zone de contenu principal, des panneaux de barre d'état personnalisés, etc. FrameworkElement
afin que la liaison de données fonctionne correctement à l'intérieur de XAML de chaque page. Jusqu'à présent, tout ce que j'ai décrit fonctionne great.Appliquer DataTemplate au type dérivé de FrameworkElement
Le problème survient lorsque j'essaie de lancer rapidement une liste de toutes les pages. J'ai un ItemsControl
que j'ai lié à la liste des pages actives, et un DataTemplate
affecté à un ItemTemplate
consistant simplement en une étiquette liée à la propriété Title
de la page (comme indiqué, c'est juste une chaîne normale). Quand je le lance, rien n'affiche cependant dans la liste et je reçois ce dans la sortie d'erreur:
System.Windows.Data Error: 25 : ItemTemplate and ItemTemplateSelector are not valid for item.; Type='WelcomePage'
Si je change le type de base à tout sauf FrameworkElement
les œuvres de modèle, mais la liaison de données à l'intérieur de chaque page se décompose horriblement (la liaison aux éléments via ElementName
échoue, bien que les deux contrôles impliqués soient des enfants d'un FrameworkElement
commun, qui est défini dans le code XAML de la page). Quelqu'un connaît un moyen d'obtenir un DataTemplate à appliquer à un type dérivé de FrameworkElement ou d'obtenir une liaison de données pour travailler dans un fichier XAML enraciné par un non-FrameworkElement?
Si vous êtes toujours intéressé par une réponse à cette question, pouvez-vous publier votre code pour le type dérivé de FrameworkElement? L'élément Framework a beaucoup de propriétés et de méthodes sans implémentations par défaut et suppose que les classes dérivées fourniront la plomberie correcte. Les autres classes dérivées de FrameworkElement fournissent des implémentations, c'est pourquoi les choses fonctionnent si vous changez le type de classe. –