2010-05-24 2 views
5

큰 프로젝트를 SL4로 업그레이드하는 동안 오류가 발생했습니다. 나는 원래의 테마를 쓰지 않았고 테마 지식은 훌륭하지 않습니다.암시 적 테마 오류 : 'Content'유형 'System.Windows.Controls.Control'에서 속성을 찾을 수 없습니다.

<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> 

:
나는이 같은 LabelHeader 스타일링하고, 내 데모 애플리케이션에서 나는 레이블과 내가 만든 DefaultStyleKey = 대해서 typeof (LabelHeader와 라벨에서 불과 파생 클래스)입니다 가지고 LabelHeader을 (이 이 SL3에서 작동하지만 SL4에서 내가 얻을 :

오류 : 2500
카테고리 : ParserError
메시지 : 속성 '콘텐츠가'형에서 찾을 수 없습니다 'System.Windows.Controls 실버 라이트 응용 프로그램 코드에서 처리되지 않은 오류 .Control '.
파일 :
라인 : 9
위치 : 168

나는이 변경하는 경우 : 내용 = "{TemplateBinding 내용을}" 물론 내용 = "XXX" 그런 다음 오류가없는에 있지만, , 나는 XAML 페이지에서 설정 한 내용이 아니라 내 레이블에 XXX을 얻습니다.

어떻게하면이 아이디어를 얻을 수 있습니까? 여기

데모 프로젝트 :

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

www.silverlight.net 포럼에 게시 된 Wolf Schmidt (MSFT) 덕분에 문제는 확인되고 설명되며 잠재적으로 해결 된 것으로 확인되었습니다. 그에 따르면 Silverlight 4는 이제 ControlTemplates와 관련된 Silverlight 3의 준 동적 동작을 엄격한 방식으로 간주하므로 ControlTemplate의 TargetType에 대한 속성이 존재하지 않으면 Silverlight 4에서 오류가 발생합니다. 주목할 중요한 점은 TargetType이 ControlTemplate에 지정되어 있지 않으면 TargetType = "Control"입니다.

문제 해결은 템플릿 바인딩에 사용 된 속성이 해결되도록 ControlTemplate의 TargetType을 지정하는 것입니다.는 IDE/인텔리이 TemplateBinding에 지정된 속성이 실제로 부도에 있는지 확인 할 수 있다면

<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> 

그것은 그러나 개발자들에게 매우 유용 할 것입니다 : 여기

은 ControlTemplate에 대해 지정된은 TargetType에 업데이트 된 스타일이다/지정된 ControlTemplate의 TargetType입니다.

에서 공급

: - 실버 .NET에 대한 포럼 토론 : (충분하지 명성을 게시 할 수> 1 하이퍼 링크) - 내는 MS 연결 문제 : https://connect.microsoft.com/VisualStudio/feedback/details/561183

+0

Silvelight.Net 토론 Jaans가 여기에 있습니다 : http :// /forums.silverlight.net/forums/p/183380/415930.aspx – Mark

4

이 예외가 발생할 경우 Silverlight 4의 일부 상황에 버그가 있습니다. 이는 Content Property에만 해당됩니다.

일시적인 수정 프로그램은 Content 속성에 대한 일반 바인딩을 사용하는 것으로 보입니다.

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

아직이 솔루션을 테스트하지는 않았지만.

+0

감사합니다, 나는 그것이 – Mark

+0

외모를 시도주지 이 작품처럼, 고마워! 이 문제에 대한 이슈가 여기에 열렸습니다 : https://connect.microsoft.com/VisualStudio/feedback/details/561183 투표가 중요하다고 생각하면 투표하십시오. – Mark

관련 문제