2016-11-20 861 views
1

我想防止我的程序改變行的顏色,當datagrid失去焦點,並有選定的行之一。我現在所擁有的代碼是:WPF DataGrid - 行選擇/失去焦點防止顏色變化

 <DataGrid.Resources> 
      <SolidColorBrush 
      x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" 
        Color="Red"/> 
     </DataGrid.Resources> 

林尋找類似

顏色爲「保持不變」

回答

1

你必須定製IsSelected屬性觸發/多觸發對於DataGridCell風格,如下所示:

<Style x:Key="DataGridCellStyle1" TargetType="{x:Type DataGridCell}"> 
     <Setter Property="Background" Value="Transparent"/> 
     <Setter Property="BorderBrush" Value="Transparent"/> 
     <Setter Property="BorderThickness" Value="1"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type DataGridCell}"> 
        <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True"> 
         <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
     <Style.Triggers> 
      <Trigger Property="IsSelected" Value="True"> 
       <Setter Property="Background" Value="Red"/> 
       <Setter Property="Foreground" Value="White"/> 
       <Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> 
      </Trigger> 
      <Trigger Property="IsKeyboardFocusWithin" Value="True"> 
       <Setter Property="BorderBrush" Value="{DynamicResource {x:Static DataGrid.FocusBorderBrushKey}}"/> 
      </Trigger> 
      <MultiTrigger> 
       <MultiTrigger.Conditions> 
        <Condition Property="IsSelected" Value="true"/> 
        <Condition Property="Selector.IsSelectionActive" Value="false"/> 
       </MultiTrigger.Conditions> 
       <Setter Property="Background" Value="Red"/> 
       <Setter Property="Foreground" Value="White"/> 
       <Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightBrushKey}}"/> 
      </MultiTrigger> 
      <Trigger Property="IsEnabled" Value="false"> 
       <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 

,然後應用自定義樣式:

 <DataGrid ItemsSource="{Binding Data}" CellStyle="{DynamicResource DataGridCellStyle1}"/> 

enter image description here


編輯:添加全XAML:

MainWindow.xaml:

<Window x:Class="WpfApplication333.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:WpfApplication333" 
    mc:Ignorable="d" 
    Title="MainWindow" 
    Height="300" 
    Width="300"> 

<Window.Resources> 

    <Style x:Key="DataGridCellStyle1" TargetType="{x:Type DataGridCell}"> 
     <Setter Property="Background" Value="Transparent"/> 
     <Setter Property="BorderBrush" Value="Transparent"/> 
     <Setter Property="BorderThickness" Value="1"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type DataGridCell}"> 
        <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True"> 
         <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
     <Style.Triggers> 
      <Trigger Property="IsSelected" Value="True"> 
       <Setter Property="Background" Value="Red"/> 
       <Setter Property="Foreground" Value="White"/> 
       <Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> 
      </Trigger> 
      <Trigger Property="IsKeyboardFocusWithin" Value="True"> 
       <Setter Property="BorderBrush" Value="{DynamicResource {x:Static DataGrid.FocusBorderBrushKey}}"/> 
      </Trigger> 
      <MultiTrigger> 
       <MultiTrigger.Conditions> 
        <Condition Property="IsSelected" Value="true"/> 
        <Condition Property="Selector.IsSelectionActive" Value="false"/> 
       </MultiTrigger.Conditions> 
       <Setter Property="Background" Value="Red"/> 
       <Setter Property="Foreground" Value="White"/> 
       <Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightBrushKey}}"/> 
      </MultiTrigger> 
      <Trigger Property="IsEnabled" Value="false"> 
       <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 

</Window.Resources> 

<Window.DataContext> 
    <local:MyViewModel/> 
</Window.DataContext> 

<Grid> 

    <DataGrid x:Name="dataGrid" ItemsSource="{Binding Data}" HorizontalAlignment="Left" Margin="8,7,0,0" VerticalAlignment="Top" Height="248" Width="113" CellStyle="{DynamicResource DataGridCellStyle1}"/> 
    <TextBox x:Name="textBox" HorizontalAlignment="Left" Height="23" Margin="143,116,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/> 

</Grid> 

+0

我在我的文章中添加了完整的XAML,請參閱我的**編輯**。 – jsanalytics

+0

我以某種方式設法在編輯之前使其工作,但您的答案完全解決了我的問題。謝謝。 – JanRad

+0

非常歡迎,謝謝! – jsanalytics