2010-06-09 2 views
1

CodeBehind 파일에서 ContentPresenter의 ContentTemplate을 변경하고 싶습니다. 그러나 Silverlight 4 응용 프로그램에서 XamlParseException을 실행하면 오류 코드 2260이 발생합니다.CodeBehind에서 ContentTemplate을 설정하십시오. XamlParseException 2260 오류

foreach (ContentPresenter item in Headers) 
{ 
    item.ContentTemplate = Parent.UnselectedHeaderTemplate; 
} 

if ((index >= 0) && (index < Headers.Count)) 
{ 
    ContentPresenter item0 = (ContentPresenter)Headers[index]; 
    item0.ContentTemplate = Parent.SelectedHeaderTemplate; 
} 

"if"에 코드가없는 foreach 코드 만 수행하면 작동합니다. foreach없이 "if"코드 만 수행하면 작동합니다. 그러나 togheter ("if"코드와 foreach 코드)는 작동하지 않습니다.

왜 작동하지 않는지 전혀 알 수 없습니다. 두 템플릿은 다음과 같이 :

<Setter Property="UnselectedHeaderTemplate"> 
     <Setter.Value> 
      <DataTemplate> 
       <ContentControl Content="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content}" 
          Margin="10,-10" 
          FontSize="72" 
          Foreground="#FF999999" 
          CacheMode="BitmapCache"/> 

      </DataTemplate> 
     </Setter.Value> 
    </Setter> 

    <!-- SelectedHeader template --> 
    <Setter Property="SelectedHeaderTemplate"> 
     <Setter.Value> 
      <DataTemplate> 
       <ContentControl Content="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content}" 
          Margin="10,-10" 
          FontSize="72" 
          Foreground="{TemplateBinding Foreground}" 
          CacheMode="BitmapCache"/> 
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 

당신은 아이디어가 있다면 어떤 문제를 말씀 해주십시오된다.

답변

0

코드가 작동하지 않는 이유를 설명 할 수는 없지만이 목표를 달성하기위한 끔찍한 방법입니다.

이러한 종류의 작업은 VisualStateManager으로 처리하는 것이 가장 좋습니다. "Selected"및 "Unselected"두 가지 상태를 만들고 Unselected 상태를 비워두고 "# FF999999"색을 Foreground에 할당하는 "Selected"상태로 만듭니다.

지금 코드가 수행하는 데 필요한 모든입니다 : - 해당 항목에 대한

VisualStateManager.GotoState(item, "Selected", false); 

또는

VisualStateManager.GotoState(item, "Unselected", false); 

.

관련 문제