2010-05-24 32 views
5

嘗試將我們的大型項目升級到SL4時出現錯誤。 我沒有寫出原始主題,我的主題知識也不是很好。 在我的演示應用程序我有一個標籤和一個LabelHeader(我已經創建並從標籤只是一個派生類DefaultStyleKey = typeof運算(LabelHeader);
我的造型像這樣LabelHeader:隱式主題錯誤:在'System.Windows.Controls.Control'類型中未找到屬性'Content'

<Style TargetType="themeControls:LabelHeader"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate> 
       <DataInput:Label 
        FontSize="{TemplateBinding FontSize}" 
        FontFamily="{TemplateBinding FontFamily}" 
        Foreground="{TemplateBinding Foreground}" 
        Content="{TemplateBinding Content}"/> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="FontFamily" Value="Tahoma"/> 
    <Setter Property="FontSize" Value="20"/> 
    <Setter Property="Foreground" Value="Red"/> 
</Style> 

這部作品在SL3但SL4我得到:

錯誤:未處理的錯誤在Silverlight應用程序 代碼:2500
類別:ParserError
消息:屬性「內容」的類型未找到「System.Windows.Controls .Control'。
文件:
行:9
位置:168

如果我改變了: CONTENT = 「{TemplateBinding內容}」 到 CONTENT = 「XXX」 那就沒有錯誤,但是,當然,我在我的標籤中獲得XXX,而不是在頁面上的XAML中設置的內容

任何想法如何才能使此工作?

這裏演示項目:

http://walkersretreat.co.nz/files/ThemeIssue.zip

(道歉轉貼,我至今在這裏沒有得到迴應:http://forums.silverlight.net/forums/p/183380/415930.aspx#415930

編輯答案提供看起來會工作。此問題已在此處打開: https://connect.microsoft.com/VisualStudio/feedback/details/561183

投票如果您認爲這很重要!

回答

6

感謝沃爾夫施密特(MSFT)在www.silverlight.net論壇上的發帖,該問題已經確定,解釋並可能按照設計解決。據他介紹,Silverlight 4現在將以更嚴格的方式考慮Silverlight 3關於ControlTemplates的準動態行爲,當該屬性不存在於ControlTemplate的TargetType中時,會導致Silverlight 4出現錯誤。重要的是要注意的是,當ControlType中沒有指定TargetType時,它默認爲TargetType =「Control」。

解決該問題的方法是爲ControlTemplate指定一個TargetType,以便模板綁定中使用的屬性將會解析。

這裏有一個更新的風格,爲的ControlTemplate指定的TargetType:

<Style x:Key="LabelHeader" TargetType="controls:Label"> 
    <Setter Property="Margin" Value="0" /> 
    <Setter Property="Opacity" Value=".6" /> 
    <Setter Property="VerticalAlignment" Value="Stretch" /> 
    <Setter Property="VerticalContentAlignment" Value="Center" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="controls:Label"> 
       <Border BorderBrush="#CCCCCCCC" BorderThickness=".5" Background="#CCEFEFEF"> 
        <ContentPresenter VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Margin="2" Content="{TemplateBinding Content}"/> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

這將然而是非常有用的給開發商,如果IDE /智能感知可以確認的是,在TemplateBinding指定的屬性實際上存在於違約/ ControlTemplate的指定TargetType。

從來源: - 我們的Silverlight的.NET論壇討論:(沒有足夠的口碑後> 1個超級鏈接) - 我的MS連接問題:https://connect.microsoft.com/VisualStudio/feedback/details/561183

+0

Jaans正在討論的Silvelight.Net討論內容如下:http:/ /forums.silverlight.net/forums/p/183380/415930.aspx – Mark 2010-05-28 03:56:55

4

發生此異常時,Silverlight 4中的某些情況存在一個錯誤。它對於內容屬性是特定的。

臨時修復似乎是對Content屬性使用常規綁定。

Content="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content}" 

雖然我還沒有測試過這個解決方案。

+0

謝謝,我會試試看 – Mark 2010-05-24 07:57:48

+0

外貌喜歡這個作品,謝謝!此問題已在此處打開:https://connect.microsoft.com/VisualStudio/feedback/details/561183如果您認爲這很重要,請投票 – Mark 2010-05-25 01:34:34

相關問題