WPF编译错误:模板部分不支持类型为'PropertyArrayStart'的标记。

28

通常我不会只在SO上发布一个错误消息,但在谷歌搜索中只找到了一个结果之后,我认为至少在SO上打开这个错误的讨论。

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

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

这段代码无法编译,我收到了以下错误信息:

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

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

这真的让我很困惑。在谷歌上搜索只返回了一个结果,其中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>

...仍然没有运气。

欢迎任何想法!

1个回答

71

27分钟真是有很多事情发生了... :)

将依赖属性的类型从unit[]更改为IList<unit>解决了问题。最棒的是,由于数组已经实现了该接口,所以不需要太多代码更改。

我不确定通过接口(callvirt)调度到数组是否会更慢。我的猜测是会。

原始错误信息提示存在某些我不太理解的问题。任何能够正确解释它的答案我都会接受。


1
我也感谢您的回复。我和其他人都将花费大量时间来尝试解决这个问题。在午夜时进行一次快速的StackOverflow搜索真是太好了。+1 - TravisWhidden

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接