【问题标题】:WPF - Compilation error: Tags of type 'PropertyArrayStart' are not supported in template sectionsWPF - 编译错误:模板部分不支持“PropertyArrayStart”类型的标签
【发布时间】:2010-10-29 21:58:06
【问题描述】:

通常我不会只在 SO 上发布错误消息,但在 Google 搜索后只找到一个结果,我想我至少会在 SO 上为这个错误打开地板。

我有一个名为Sparkline 的自定义控件,其依赖属性名为Values,类型为unit[]。这是我在DataTemplate 中使用它的示例:

<DataTemplate DataType="{x:Type Activity:ActivityHistory}">
    <Controls:Sparkline Grid.Column="1" Values="{Binding Path=Values}" />
</DataTemplate>

此代码无法编译。我收到错误消息:

模板部分不支持“PropertyArrayStart”类型的标签。

行号/列号表示Values 属性的开始。

这真的让我很震惊。在 Google 上搜索返回 one result,其中 John_C 遇到了完全相同的问题。不幸的是,他的解决方案涉及将控件移动到单独的程序集中。好吧,我的已经在一个单独的程序集中了。我的猜测是还有别的东西在起作用。

我从未听说过PropertyArrayStart。搜索仅返回与 XAML 序列化相关的几页。有趣的东西,但帮助不大。

想想,我想不出框架中有任何依赖属性有数组类型。这允许吗?

我还尝试使用嵌套元素而不是 Binding 的标记扩展。

<DataTemplate DataType="{x:Type Activity:ActivityHistory}">
    <Controls:Sparkline Grid.Column="1">
        <Controls:Sparkline.Values>
            <Binding Path="Values"/>
        </Controls:Sparkline.Values>
    </Controls:Sparkline>
</DataTemplate>

...仍然没有运气。

欢迎任何想法!

【问题讨论】:

    标签: .net wpf xaml compilation dependency-properties


    【解决方案1】:

    这是一个多事的 27 分钟... :)

    将依赖属性的类型从unit[] 更改为IList&lt;unit&gt; 解决了这个问题。最重要的是,它不需要太多代码更改,因为数组已经实现了该接口。

    我不确定通过接口 (callvirt) 分派到数组是否更慢。我的猜测是肯定的。

    原始错误消息暗示这里发生了一些我不太明白的事情。我会接受任何正确解释的答案。

    【讨论】:

    • 我也很感谢您的回复。我自己以及其他所有人都将花费大量时间试图弄清楚这一点。一个快速的 StackOverflow 搜索很高兴在午夜找到。 +1
    猜你喜欢
    • 2020-01-30
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-26
    • 1970-01-01
    相关资源
    最近更新 更多