2013-02-14 7 views
6

Sto utilizzando Visual Studio 2012 su Windows 7. Devo sapere perché il seguente stile per la riga selezionata di Grid non funziona per i colori di sfondo e di primo piano ma funziona perfettamente bene per altre proprietà come BorderBrush e BorderThickness ecc? Anche se posso vederli mentre cambiano mentre il mouse supera le righe della griglia.WPF DataGrid RowStyle per la riga selezionata che non modifica lo sfondo e il colore di primo piano

<Style x:Key="gridRowStyle" TargetType="{x:Type DataGridRow}"> 
    <Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter Property="Background" Value="PeachPuff"/> 
      <Setter Property="Foreground" Value="BlueViolet"/> 
     </Trigger> 
     <Trigger Property="IsSelected" Value="True"> 
      <Setter Property="Background" Value="PeachPuff"/> 
      <Setter Property="Foreground" Value="BlueViolet"/> 
      <Setter Property="BorderBrush" Value="BlueViolet" /> 
      <Setter Property="BorderThickness" Value="2" /> 

     </Trigger> 
    </Style.Triggers> 
</Style> 

Ecco come sto usando sulla griglia.

<DataGrid RowStyle="{StaticResource gridRowStyle}"> 

sto sottolineando per sapere "perché", piuttosto che la soluzione al problema, come ho già la soluzione al problema se uso lo stile cella della griglia invece di RowStyle come segue:

<Style x:Key="gridCellStyle" TargetType="{x:Type DataGridCell}"> 
    <Style.Triggers> 
     <Trigger Property="IsSelected" Value="True"> 
      <Setter Property="Background" Value="PeachPuff"/> 
      <Setter Property="Foreground" Value="BlueViolet"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 
+2

Potrebbe essere perché il contenuto di GridCell si sovrappone al GridRow? Hai provato a guardare il controllo in Snoop? – Dutts

+0

Ho eseguito un test rapido con quello che hai pubblicato e funziona perfettamente. Puoi fornire maggiori dettagli su DataGrid e su qualsiasi definizione di riga? –

+0

Sono nuovo a WPF e non ho mai usato lo snoop prima. Farò un tentativo per vedere cosa sta succedendo. Grazie .... – user2071895

risposta

0

Nel Stile predefinito di DataGridCell con il seguente trigger di stile predefinito.

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

Quindi, se scritto trigger per DataGridRow, allora sarà valido solo per l'elemento che è stato posto davanti al DataGridCell nella struttura ad albero visuale.

Per modificare lo sfondo & In primo piano durante la selezione, è necessario scrivere il trigger in stile DataGridCell o rimuovere il trigger predefinito dallo stile.

0

Rimuovere semplicemente gli attributi a livello di riga nel datagrid, hanno priorità sulle proprietà attivate.

nezac