2009-06-12 5 views
1

Comment puis-je dériver une nouvelle classe à partir de DataTemplate et l'utiliser à la place de DataTemplate?Comment dériver une nouvelle classe à partir de DataTemplate et l'utiliser à la place de DataTemplate?

Par exemple, en C#:

public class DerivedDataTemplate : DataTemplate 
{ 
} 

Puis en XAML:

<local: DerivedDataTemplate DataType="{x:Type local:SomeType}"> 
    <Grid> 
     ... UI here ... 
    </Grid> 
</local:DerivedDataTemplate> 

Lorsque je tente d'utiliser mon modèle de données classe dérivée l'exception de suivi est généré:

système. Windows.Markup.XamlParseException non gérée Message = "L'objet 'Grid' ne peut pas être ajouté à 'DerivedDataTemplate' L'objet de type 'System.Windows.Controls.Grid' ne peut pas être converti d pour taper 'System.Windows.FrameworkElementFactory'.

Est-ce que quelqu'un sait comment contourner cette exception et utiliser avec succès une classe dérivée de DataTemplate?

+0

Par curiosité, pourquoi héritez-vous de DataTemplate? – micahtan

+0

Je voulais fondamentalement pouvoir disposer d'un type de modèle de données spécial auquel je pourrais ajouter des données supplémentaires et utiliser les règles intégrées pour la recherche de ressources et l'instanciation de modèles. J'ai fini par le faire d'une manière différente - mais il aurait été plus simple d'hériter de DataTemplate. –

Répondre

0

Cela a fonctionné pour moi (bien que je n'aie pas créé un type local). J'ai copié votre code et j'ai dû supprimer l'espace entre local: et DerivedDataTemplate dans la déclaration XAML. Dans Blend 3, il ne fonctionne même pas pour moi, je ne suis pas sûr de Blend 2.

+0

L'espace était juste une faute de frappe en le mettant SO, mon vrai code n'a pas eu cette erreur. Donc, quand vous dites que cela a fonctionné pour vous, que voulez-vous dire exactement? Dans la phrase suivante, vous semblez dire que ça n'a pas marché pour vous! J'utilise Visual Studio 2008 Express. –

+0

Désolé, je n'étais pas clair: votre code a travaillé pour moi sans l'espace. * avec * l'espace qu'il ne fonctionnerait même pas dans le mélange 3. –

Questions connexes