C# 在DataTemplate和Style中定义不同的前景色

C# 在DataTemplate和Style中定义不同的前景色,c#,wpf,C#,Wpf,对于TreeViewItem,我使用DataTemplate。在此模板中,我将前景色定义为蓝色。当我选择一个TreeView项目时,我希望前景颜色为白色。我的第一个想法是创造一种风格,但这种风格行不通。显然我犯了一些错误。有什么想法吗 <DataTemplate x:Key="styDriveTreeNode" DataType="{x:Type local:NodeDrive }"> <Grid Margin="0"> &

对于TreeViewItem,我使用DataTemplate。在此模板中,我将前景色定义为蓝色。当我选择一个TreeView项目时,我希望前景颜色为白色。我的第一个想法是创造一种风格,但这种风格行不通。显然我犯了一些错误。有什么想法吗

   <DataTemplate x:Key="styDriveTreeNode" DataType="{x:Type local:NodeDrive }">
        <Grid  Margin="0">
            <Grid.RowDefinitions>
                <RowDefinition Height="*"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="16"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <Image x:Name="picDrv" Grid.Column="0" Grid.Row="0" Grid.RowSpan="1" Height="16" Width="16"/>
            <Label x:Name="lblDrvName" Content="{Binding HeaderLabel}" Grid.Column="1" Grid.Row="0"  FontSize="12" Padding="0" Margin="2"/>
            <Label x:Name="lblDrvDetails" Content="{Binding HeaderDetails}" Grid.Column="1" Grid.Row="1" FontSize="10" Padding="0" Margin="2"/>
        </Grid>
        <DataTemplate.Triggers>
            <DataTrigger Binding="{Binding IsSystemPartition}" Value="true">
                <Setter TargetName="picDrv" Property="Source" Value="/Images/DriveWin16.png"/>
                <Setter TargetName="lblDrvName" Property="Foreground"  Value="Blue"/>
                <Setter TargetName="lblDrvDetails" Property="Foreground"  Value="Blue"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding IsDrive}" Value="true">
                <Setter TargetName="picDrv" Property="Source" Value="{StaticResource ResourceKey=imgDrv}"/>
            </DataTrigger>
        </DataTemplate.Triggers>

    </DataTemplate>
    <Style TargetType="{x:Type TreeViewItem}">            
        <Style.Triggers>
            <Trigger Property="IsSelected" Value="true">
                <Setter Property="Foreground" Value="White"/>
            </Trigger>
        </Style.Triggers>                
    </Style>

您正在将
前台
属性指定给特定的目标名称,因此,您还必须更改该特定
目标名称
的前台。您可以在
Datatemplate.Triggers中实现这一点,如下所述

<DataTemplate x:Key="styDriveTreeNode" DataType="{x:Type local:NodeDrive }">
        <Grid  Margin="0">
            <Grid.RowDefinitions>
                <RowDefinition Height="*"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="16"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <Image x:Name="picDrv" Grid.Column="0" Grid.Row="0" Grid.RowSpan="1" Height="16" Width="16"/>
            <Label x:Name="lblDrvName" Content="{Binding HeaderLabel}" Grid.Column="1" Grid.Row="0"  FontSize="12" Padding="0" Margin="2"/>
            <Label x:Name="lblDrvDetails" Content="{Binding HeaderDetails}" Grid.Column="1" Grid.Row="1" FontSize="10" Padding="0" Margin="2"/>
        </Grid>
        <DataTemplate.Triggers>
            <DataTrigger Binding="{Binding IsSystemPartition}" Value="true">
                <Setter TargetName="picDrv" Property="Source" Value="/Images/DriveWin16.png"/>
                <Setter TargetName="lblDrvName" Property="Foreground"  Value="Blue"/>
                <Setter TargetName="lblDrvDetails" Property="Foreground"  Value="Blue"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding IsDrive}" Value="true">
                <Setter TargetName="picDrv" Property="Source" Value="{StaticResource ResourceKey=imgDrv}"/>
            </DataTrigger>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TreeViewItem}}, Path=IsSelected}" Value="True">
                            <Setter TargetName="lblDrvName" Property="Foreground" Value="White"/>
                            <Setter TargetName="lblDrvDetails" Property="Foreground" Value="White"/>
                        </DataTrigger>
        </DataTemplate.Triggers>

    </DataTemplate>

早上好。它工作正常:-)我一步一步地从winforms切换到wpf。Binding=“{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type TreeViewItem},Path=IsSelected}”Value=“True”是我新创建的。谢谢你的帮助!顺便说一句:有可能,把这个线程标记为已解决?