1

我有HierarchicalDataTemplate裏面的TextBlock。當TreeViewItem選擇時,我需要將前景色設置爲紅色。Silverlight:如何更改TreeViewItem文本顏色,當它被選中

<controls:TreeView Background="#FF939597" 
     ScrollViewer.HorizontalScrollBarVisibility="Disabled" x:Name="CommentTreeView" Margin="0,0,0,118" 
      ItemContainerStyle="{StaticResource SectionsTreeViewItemStyle}"> 
       <controls:TreeView.ItemTemplate> 
        <control:HierarchicalDataTemplate ItemsSource="{Binding SubSections}" ItemContainerStyle="{StaticResource SectionsTreeViewItemStyle}"> 
        <Grid> 

        <TextBlock x:Name="ItemTextBlock" Margin="0,6,48,0" 
           <!-- ??? Foreground="Red" ??? if item selected ??? --> 
             FontSize="11" Text="{Binding Path=Name}" 
             TextWrapping="Wrap" VerticalAlignment="Top"> 
        </TextBlock> 

       </Grid> 

       </control:HierarchicalDataTemplate> 
      </controls:TreeView.ItemTemplate> 
     </controls:TreeView> 

回答

1

可以使用的RelativeSource的自定義實現Silverlight的做到這一點:

http://www.codeproject.com/Articles/36500/Implementing-RelativeSource-binding-in-Silverlight.aspx

<UserControl.Resources> 
    <Converters:BackgroundConverter x:Key="BackgroundConverter"/> 
</UserControl.Resources> 

    <controls:TreeView Background="#FF939597" 
      ScrollViewer.HorizontalScrollBarVisibility="Disabled" x:Name="CommentTreeView" Margin="0,0,0,118" 
       ItemContainerStyle="{StaticResource SectionsTreeViewItemStyle}"> 
        <controls:TreeView.ItemTemplate> 
         <control:HierarchicalDataTemplate ItemsSource="{Binding SubSections}" ItemContainerStyle="{StaticResource SectionsTreeViewItemStyle}"> 

          <Grid> 

          <TextBlock x:Name="ItemTextBlock" Margin="0,6,48,0" 
               FontSize="11" Text="{Binding Path=Name}" 
               TextWrapping="Wrap" VerticalAlignment="Top"> 
                  <local:BindingHelper.Binding> 
            <local:BindingProperties TargetProperty="Foreground" SourceProperty="IsSelected" 
                  Converter="{StaticResource BackgroundConverter}" 
                  RelativeSourceAncestorType="TreeViewItem"/> 
           </local:BindingHelper.Binding> 
          </TextBlock> 

         </Grid> 

         </control:HierarchicalDataTemplate> 
        </controls:TreeView.ItemTemplate> 
       </controls:TreeView>