2

我正在尝试加载失败的 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>

在我的树视图的构造函数中使用它:

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' 和 position de ligne '2'。

(我的机器是用法语配置的,这条消息的意思是:“无法创建未知类型的 HierarchicalDataTemplate”)。

有人知道为什么吗?当直接在 xaml 文件中编写时,xaml 片段可以完美运行。

谢谢 !


编辑

我用一个简单的版本进行了测试:

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

问题是一样的。


编辑2

好的,问题更广泛,似乎与“HierarchicalDataTemplate”无关

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

产生同样的错误...

4

2 回答 2

4

好的,我发现了问题。

正如John Bowen所说,第一个问题是无法处理的事件处理程序。第二个问题是 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);
于 2013-04-23T18:25:24.613 回答
2

您不能使用事件处理程序,XamlReader因为它们需要位于 XAML 的代码隐藏中,而解析的 XAML 中显然不存在。

于 2013-04-23T18:04:50.310 回答