2017-06-28 37 views
0

我正在開發一個VSIX(Visual Studio Extension)項目。它包含一個WPF DataGrid。當DataGrid變爲非活動狀態(失去焦點)時,我需要設置自定義DataGrid行高亮顏色,基於Visual Studio Theme的如何設置基於Visual Studio主題的WPF DataGrid的不活動行顏色

雖然很多類似那種Q &由於通過堆棧溢出發現我無法找到這是基於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

,你可以嘗試使用VsBrushesEnvironmentColors去實現它。像這樣:

<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> 

enter image description here

+0

問題聽到的是基於Rawbackground的VsBrush顏色,我需要申請/設置無效行高亮顏色。 換句話說 If(Vs Theme = Dark)Then Inactive Rowbackground = Red, If(Vs Theme = Light)Then Inactive Rowbackground = Green Thanks –

相關問題