2009-05-29 40 views
13

通常我不會在SO上發佈錯誤消息,但是在Google搜索只發現一次命中後,我想我至少會在這裏打開這個錯誤的地板。WPF - 編譯錯誤:模板部分不支持'PropertyArrayStart'類型的標記

我有一個名爲Sparkline的自定義控件,它具有unit[]類型的依賴項屬性Values。這裏就是我用它在DataTemplate一個例子:

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

此代碼不能編譯。我收到錯誤消息:

Tags of type 'PropertyArrayStart' are not supported in template sections.

行/列號指示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> 

...仍然沒有運氣。

歡迎任何想法!

回答

38

它是極不平凡27分鐘... :)

unit[]IList<unit>改變依賴屬性的類型解決了這個問題。最重要的是,由於數組已經實現了該接口,因此它不需要進行很多代碼更改。

我不確定通過接口(callvirt)調度到數組是否較慢。我的猜測是肯定的。

最初的錯誤消息提示,這裏有些事情我不太明白。我會接受任何解釋正確的答案。

+1

你是我的英雄。 :) – 2010-10-13 21:00:27