C# 在DataTemplate和Style中定义不同的前景色
对于TreeViewItem,我使用DataTemplate。在此模板中,我将前景色定义为蓝色。当我选择一个TreeView项目时,我希望前景颜色为白色。我的第一个想法是创造一种风格,但这种风格行不通。显然我犯了一些错误。有什么想法吗C# 在DataTemplate和Style中定义不同的前景色,c#,wpf,C#,Wpf,对于TreeViewItem,我使用DataTemplate。在此模板中,我将前景色定义为蓝色。当我选择一个TreeView项目时,我希望前景颜色为白色。我的第一个想法是创造一种风格,但这种风格行不通。显然我犯了一些错误。有什么想法吗 <DataTemplate x:Key="styDriveTreeNode" DataType="{x:Type local:NodeDrive }"> <Grid Margin="0"> &
<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”是我新创建的。谢谢你的帮助!顺便说一句:有可能,把这个线程标记为已解决?