我正在开发一个VSIX(Visual Studio Extension)项目。它包含一个WPF DataGrid。当DataGrid变为非活动状态(失去焦点)时,我需要设置自定义DataGrid行高亮颜色,基于Visual Studio主题。
虽然通过堆栈溢出找到了许多类似的Q& As,但我无法找到基于Visual studio主题的解决方案。
我遇到了以下一段代码(样式)。但是它不能满足我的要求,请帮助解决这个问题。
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<Trigger Property="IsSelected" Value="true">
<Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}" />
<Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />
</Trigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="True" />
<Condition Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}, Path=IsKeyboardFocusWithin}" Value="False" />
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<!--Following Background color has to be changed based on VS theme-->
<Setter Property="Background" Value="DarkGray" />
<Setter Property="Foreground" Value="{DynamicResource VsBrush.WindowText}" />
<!--This BorderBrush color has to be changed based on VS theme-->
<Setter Property="BorderBrush" Value="DarkGray"/>
</MultiDataTrigger.Setters>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
由于
答案 0 :(得分:0)
您可以尝试使用VsBrushes或EnvironmentColors来实现它。像这样:
<UserControl x:Class="TWToolbar.TestToolWindowControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:vsShell="clr-namespace:Microsoft.VisualStudio.Shell;assembly=Microsoft.VisualStudio.Shell.14.0"
xmlns:vsUI="clr-namespace:Microsoft.VisualStudio.PlatformUI;assembly=Microsoft.VisualStudio.Shell.14.0"
mc:Ignorable="d"
d:DesignHeight="400" d:DesignWidth="500"
Name="MyToolWindow">
<Grid>
<StackPanel Orientation="Vertical">
<Button Content="Click me!" Click="button1_Click" Width="120" Height="20" Name="button1"/>
<DataGrid Name="dgUsers" AutoGenerateColumns="False">
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<Trigger Property="IsSelected" Value="true">
<Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}" />
<Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />
</Trigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="True" />
<Condition Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}, Path=IsKeyboardFocusWithin}" Value="False" />
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<!--Following Background color has to be changed based on VS theme WindowText-->
<Setter Property="Background" Value="DarkGray" />
<Setter Property="Foreground" Value="{DynamicResource {x:Static vsShell:VsBrushes.AccentBorderKey}}"/>
<!--<Setter Property="Foreground" Value="{DynamicResource {x:Static vsUI:EnvironmentColors.AccentBorderBrushKey}}"/>-->
<!--This BorderBrush color has to be changed based on VS theme-->
<Setter Property="BorderBrush" Value="DarkGray"/>
</MultiDataTrigger.Setters>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
<DataGridTextColumn Header="Birthday" Binding="{Binding Birthday}" />
</DataGrid.Columns>
</DataGrid>
</StackPanel>
</Grid>
</UserControl>