2013-04-23 2 views
2

Я пытаюсь загрузить foillowing XAML:XamlReader.Parse работать с 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> 

, используя это в конструкторе моего 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); 

Я м получаю эту ошибку:

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

(Моя машина сконфигурирована на французском, это сообщение означает: «Невозможно создать УНК nown type HierarchicalDataTemplate ").

Есть ли у кого-нибудь идеи, почему? Фрагмент xaml отлично работает при написании непосредственно в файле xaml.

Спасибо!


Редактировать

У меня был тест с простой версии:

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

и проблема та же.


edit2

Ok проблема шире и, кажется, не связан с `HierarchicalDataTemplate»

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

Выдает ту же ошибку ...

ответ

3

Хорошо, я нашел проблему (и).

Как John Bowen sait, первой проблемой являются обработчики событий, которые невозможно обработать. Вторая проблема заключается в том, что основное пространство имен отсутствует в xaml.

Так что этот код работает:

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

Вы не можете использовать обработчики событий с XamlReader, потому что они должны находиться в коде XAML, что, очевидно, не существует в анализируемом XAML.

+0

Я просто проверял удаление обработчиков, и сообщение об ошибке по-прежнему то же самое. – Shimrod

+0

Фактически, я также тестировал с использованием более простой версии: 'string template =" "+ " "+ " ";' и он по-прежнему не работает с тем же сообщением об ошибке. – Shimrod

 Смежные вопросы

  • Нет связанных вопросов^_^