XamlReader.Parse似乎不使用HierarchicalDataTemplate

时间:2013-04-23 16:58:13

标签: xaml hierarchicaldatatemplate xamlreader

我正在尝试加载foillowing xaml:

<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);

我收到了这个错误:

  

'Impossibledecréerletype inconnu'HierarchicalDataTemplate'。'   numérodeligne'1'et position de ligne'2'。

(我的机器配置为法语,此消息表示:“无法创建未知类型HierarchicalDataTemplate”)。

有人知道为什么吗? 当直接在xaml文件中编写时,xaml代码段可以正常工作。

谢谢!


修改

我有一个简单版本的测试:

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

问题是一样的。


EDIT2

好的问题更广泛,似乎与`HierarchicalDataTemplate'

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

产生同样的错误......

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:2)

您不能将事件处理程序与XamlReader一起使用,因为它们必须位于XAML的代码隐藏中,这在解析的XAML中显然不存在。