2009-11-23 8 views
2

WPF의 목록 상자에 객체 컬렉션을 바인딩하고 있습니다. 간단히하기 위해 바인딩하는 객체에는 이름, URL, IsBold라는 세 가지 속성이 있습니다. 내가하고 싶은 일은 IsBold가 true로 설정된 경우 다른 것으로 표시됩니다. 예를 들어 이름이 나타나는 TextBlock을 굵은 체로 설정하려고합니다. 이 같은 것이 가능한가? 내 속성 중 하나가 특정 값일 경우 다른 스타일이나 무언가를 사용할 수 있습니까? (XAML에서 if/else와 같은 것을 할 수 있습니까?) 나는 이것을 어디서부터 시작해야할지 전혀 모른다. 데이터 바인딩을 사용하여 XAML 파일의 스타일을 변경하려면 어떻게해야합니까?

는 ('isBold'로부터 'notBold'스타일 변경을 통지) 내 DataTemplate을

<TextBlock Style="{StaticResource notBold}" Text="{Binding Path=Name}"></TextBlock> 

이 있습니다 그리고 IsBold가 특정 항목에 대해 true로 설정되어있는 경우 나는 그것이 싶습니다 말

<TextBlock Style="{StaticResource isBold}" Text="{Binding Path=Name}"></TextBlock> 

또는 이와 유사한 것. 나는 좀 더 일반적인 질문을 추측한다. 데이터 바인딩 된 항목을 기반으로 무언가의 외관을 변경할 수 있습니까? 그리고 가능하지 않다면, 어떻게 이런 일이 행해지겠습니까? 어떻게 든 코드 숨김을 통해?

감사

평소는 DataTrigger가 IsBold 속성을 기반으로하는 TextBlock/텍스트 상자의 글꼴 너비를 설정 한 다음 목록에있는 개체에 대한 DataTemplate을 쓰기이고 것 무엇

답변

6

.

<DataTemplate DataType="DataItem"> 
    <TextBlock x:Name="tb" Text="{Binding Name}"/> 
    <DataTemplate.Triggers> 
     <DataTrigger Binding="{Binding IsBold}" Value="true"> 
      <Setter TargetName="tb" Property="FontWeight" Value="Bold" /> 
     </DataTrigger> 
     <DataTrigger Binding="{Binding IsBold}" Value="false"> 
      <Setter TargetName="tb" Property="FontWeight" Value="Normal" /> 
     </DataTrigger> 
    </DataTemplate.Triggers> 
</DataTemplate> 

당신은 다음 콤보 상자의 ItemsSource 속성에 DataItems의 목록을 설정할 것 (데이터 바인딩하거나 직접 코드 숨김 myComboBox.ItemsSource=myDataItems의 하나). 나머지는 WPF에 의해 완료됩니다.

관련 문제