2015-11-04 56 views
0

对于我的DataGridRowDataGridCell,我有一个Style。在我的RowStyle中,我更改了所选的背景,并在我的CellStyle中更改了我关注的Cell的背景。当我第一次点击一个新的时,这是有效的。但是,如果我点击中的另一个Cell,则不会应用Style。如果我用我的箭头键更改Cell,它可以工作,而不是如果我用鼠标点击。在我DataGrid我有SelectionMode =单。未显示行中的聚焦单元格

<!--DataGridRow--> 
    <Style x:Key="MYDGRowStyle" TargetType="{x:Type DataGridRow}">    
     <Setter Property="SnapsToDevicePixels" Value="true"/> 
     <!--<Setter Property="OverridesDefaultStyle" Value="True" />-->   
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type DataGridRow}"> 
        <Grid x:Name="RowGridTop"> 
         <Grid Grid.ZIndex="89" x:Name="RowGrid"/> 
          <Border 
            Grid.ZIndex="88" 
            x:Name="DGR_Border" 
            Background="{TemplateBinding Background}" 
            BorderBrush="{TemplateBinding BorderBrush}" 
            BorderThickness="{TemplateBinding BorderThickness}" 
            SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"> 
           <SelectiveScrollingGrid x:Name="selectiveScrollingGrid"> 
            <Grid.ColumnDefinitions> 
             <ColumnDefinition Width="Auto"/> 
             <ColumnDefinition Width="*"/> 
            </Grid.ColumnDefinitions> 
            <Grid.RowDefinitions> 
             <RowDefinition Height="Auto" /> 
             <!--<RowDefinition Height="Auto" />--> 
            </Grid.RowDefinitions> 
            <DataGridCellsPresenter x:Name="dataGridCellsPresenter" Grid.Column="1" ItemsPanel="{TemplateBinding ItemsPanel}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" 
                  Focusable="True" /> 
            <DataGridRowHeader x:Name="dataGridRowHeader" SelectiveScrollingGrid.SelectiveScrollingOrientation="Vertical" Grid.RowSpan="2" 
             Visibility="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=HeadersVisibility, Converter={x:Static DataGrid.HeadersVisibilityConverter}, 
             ConverterParameter={x:Static DataGridHeadersVisibility.Row}}"/> 
            <Grid Grid.Column="1" Grid.Row="1" Name="Details" Visibility="Collapsed"> 
             <DataGridDetailsPresenter x:Name="dataGridDetailsPresenter" /> 
            </Grid> 
           </SelectiveScrollingGrid> 
          </Border>        
        </Grid> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsSelected" Value="True">         
          <Setter Property="Visibility" TargetName="dataGridDetailsPresenter" Value="Hidden"/> 
          <Setter Property="Background" TargetName="RowGrid" Value="{DynamicResource Brush_DataGridSelected}" />         
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter>    
    </Style> 
    <!--DataGridRow--> 



    <!--DataGridCell--> 
    <Style x:Key="MYDGCellStyle" TargetType="{x:Type DataGridCell}"> 
     <Setter Property="OverridesDefaultStyle" Value="True" /> 
     <Setter Property="Template" Value="{DynamicResource MYDGCellControlTemplate}" /> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsReadOnly}" Value="True"> 
       <Setter Property="Background"> 
        <Setter.Value> 
         <SolidColorBrush Color="Gray" Opacity="0.3" /> 
        </Setter.Value> 
       </Setter> 
      </DataTrigger>     
     </Style.Triggers> 
    </Style> 

    <ControlTemplate x:Key="MYDGCellControlTemplate" TargetType="{x:Type DataGridCell}">    
      <Grid> 
      <Grid Grid.ZIndex="99" x:Name="CellGrid"/> 
      <Border Grid.ZIndex="98" Background="{TemplateBinding Background}"> 
        <ContentPresenter VerticalAlignment="Center" Margin="4,0,6,0" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" /> 
       </Border> 
      </Grid>    
     <ControlTemplate.Triggers> 
      <Trigger Property="IsFocused" Value="True"> 
       <Setter Property="Background" TargetName="CellGrid" Value="{DynamicResource Brush_DataGridCellFocused}" />          
      </Trigger> 
     </ControlTemplate.Triggers> 
    </ControlTemplate>   
    <!--DataGridCell--> 

如果我的目标在“RowGridTop”我Trigger聚焦Cell显示正常,但在ZIndex是不正确的。 Here显示了为什么我需要 附加Grid

回答

0

好的,我做到了。我必须更改ZIndex,以便DataGridRowStyle上的值高于DataGridCellStyle上的值。我还必须在我的“RowGrid”Grid上设置IsHitTestVisible="False"