2013-04-23 4 views
2

Je suis en train de charger le xaml foillowing:XamlReader.Parse ne semble pas fonctionner avec HierarchicalDataTemplate

<HierarchicalDataTemplate ItemsSource="{Binding Items}"> 
    <CheckBox Checked="CheckBox_Checked" Tag="{Binding Champ1}" Unchecked="CheckBox_Unchecked"> 
     <CheckBox.Template> 
      <ControlTemplate> 
       <TextBlock Background="{Binding Path=Background, RelativeSource={RelativeSource AncestorType=CheckBox}}" Text="{Binding Champ1}" /> 
      </ControlTemplate> 
     </CheckBox.Template> 
    </CheckBox> 
</HierarchicalDataTemplate> 

utilisant ce dans le constructeur de mon TreeView:

string template = "<HierarchicalDataTemplate ItemsSource=\"{Binding Items}\">" + 
        "<CheckBox Checked=\"CheckBox_Checked\"" + 
           " Tag=\"{Binding Champ1}\"" + 
           " Unchecked=\"CheckBox_Unchecked\">" + 
         "<CheckBox.Template>" + 
          "<ControlTemplate>" + 
           "<TextBlock Background=\"{Binding Path=Background," + 
                   "RelativeSource={RelativeSource AncestorType=CheckBox}}\"" + 
              "Text=\"{Binding Champ1}\" />" + 
          "</ControlTemplate>" + 
         "</CheckBox.Template>" + 
        "</CheckBox>" + 
       " </HierarchicalDataTemplate>"; 

this.ItemTemplate = (HierarchicalDataTemplate)XamlReader.Parse(template); 

Je m obtenir cette erreur:

'Impossible de créer le type inconnu 'HierarchicalDataTemplate'.' numéro de ligne '1' et position de ligne '2'.

(Ma machine étant configuré en français, ce message signifie: « Impossible de créer le UNK type natif HierarchicalDataTemplate ").

Est-ce que quelqu'un a une idée pourquoi? L'extrait xaml fonctionne parfaitement lorsqu'il est écrit directement dans le fichier xaml.

Merci!


Modifier

J'ai eu un essai avec une version simple:

string template = "<HierarchicalDataTemplate ItemsSource=\"{Binding Items}\">" + 
           "<TextBox Text=\"Test\"/>"+ 
          " </HierarchicalDataTemplate>"; 

et le problème est le même.


Edit2

Ok le problème est plus large et semble sans rapport avec la `HierarchicalDataTemplate »

string test = "<TextBox Text=\"Test\" />"; 
var ret = XamlReader.Parse(test); 

produit la même erreur ...

Répondre

3

Ok, j'ai trouvé le (s) problème (s).

En tant que John Bowen, le premier problème sont les gestionnaires d'événements qui ne peuvent pas être traités. Le deuxième problème est que l'espace de noms principal est manquant dans le xaml.

Donc, ce code fonctionne:

string template = "<HierarchicalDataTemplate xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" ItemsSource=\"{Binding Items}\">" + 
        "<CheckBox Tag=\"{Binding Champ1}\" >" + 
         "<CheckBox.Template>" + 
          "<ControlTemplate>" + 
           "<TextBlock Background=\"{Binding Path=Background," + 
                   "RelativeSource={RelativeSource AncestorType=CheckBox}}\"" + 
              " Text=\"{Binding Champ1}\" />" + 
          "</ControlTemplate>" + 
         "</CheckBox.Template>" + 
        "</CheckBox>" + 
       " </HierarchicalDataTemplate>"; 

this.ItemTemplate = (DataTemplate)XamlReader.Parse(template); 
2

Vous ne pouvez pas utiliser des gestionnaires d'événements avec XamlReader car ils doivent être situés dans le code-behind de XAML, ce qui n'existe évidemment pas dans XAML analysé.

+0

Je viens de tester la suppression des gestionnaires, et le message d'erreur est toujours le même. – Shimrod

+0

En fait, j'ai également testé en utilisant une version plus simple: 'string template =" "+ " "+ " ";' et il échoue toujours avec le même message d'erreur. – Shimrod