2012-06-08 25 views
10

sto cercando di cambiare il colore di una DataGridTextColumn.Come impostare il colore del testo DataGridTextColumn?

Ecco quello che sto facendo:

<DataGridTextColumn 
    Header="Status" 
    Binding="{Binding IsActive, 
       Converter= {StaticResource BoolToStatusConverter}}" 
    Foreground="{Binding Path=IsActive, 
       Converter={StaticResource BoolToColorConverter}}"/> 

automatico è impostato correttamente, ma il colore non cambierà, e sto ottenendo seguente errore:

System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or 
FrameworkContentElement for target element. BindingExpression:Path=IsActive; 
DataItem=null; target element is 'DataGridTextColumn' (HashCode=40349079); target 
property is 'Foreground' (type 'Brush') 

Cosa devo fare perché questo funzioni?

+0

stai Tring per impostare lo sfondo per l'intera colonna, o singole celle in un Colum? – Phil

+0

Sto cercando di impostare FOREGROUND per le singole celle –

risposta

9

È necessario specificare uno stile con un DataTrigger per CellStyle della colonna. per esempio.

<Page.Resources> 
    <Style TargetType="DataGridCell" x:Key="ActiveCellStyle"> 
     <Setter Property="Foreground" Value="Blue"/> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding IsActive}" Value="{x:Null}"> 
       <Setter Property="Foreground" Value="Green"/> 
      </DataTrigger> 
      <DataTrigger Binding="{Binding IsActive}" Value="True"> 
       <Setter Property="Foreground" Value="Red"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
    <Converters:BoolToTextConverter 
     x:Key="BoolToStatusConverter" 
     TargetCondition="True" 
     IsMatchValue="It's active" 
     IsNotMatchValue="It's dead" /> 
</Page.Resources> 
<Grid> 
    <DataGrid ItemsSource="{Binding Items}" AutoGenerateColumns="False"> 
     <DataGrid.Columns> 
      <DataGridTextColumn 
       Header="Status" 
       Binding="{Binding IsActive, 
        Converter={StaticResource BoolToStatusConverter}}" 
       CellStyle="{StaticResource ActiveCellStyle}"/> 
     </DataGrid.Columns> 
    </DataGrid> 
</Grid> 
+0

è attivo può essere nullo. Come posso specificarlo? –

+1

@ArsenZahray: aggiunto trigger per null. Presumo che il tuo convertitore di stato gestisca valori nulli. – Phil

+0

Mi scuso perché sono nuovo di WPF. Ho un errore di simbolo non risolto per il tag "Convertitori" nel tuo codice, quale altro codice devo definire? – Danielle

0

primo piano è un pennello, non un colore. Può analizzare un colore in XAML, ma che non è utilizzato quando si crea un legame con un convertitore.

Utilizzare un oggetto BoolToBrushConverter o creare un SolidColorBrush come primo piano e associare la proprietà "Colore" a BoolToColorConverter. Così:

+1

L'ho notato, ma il mio problema è che WPF vede la proprietà IsActive in Binding e non la vede in primo piano. Nel frattempo, ho modificato BoolToColorConverter per tornare pennelli solidi al posto di colori –

7

Pur non essendo tecnicamente un DataGridTextColumn, questo è quello che faccio di solito:

<DataGridTemplateColumn Header="Status" SortMemberPath="Status"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Status}" Foreground="{Binding Status, Converter={StaticResource StatusToSolidColor}}" /> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

ottengo il DataContext che voglio, e posso resuse convertitori che io possa già avere in atto nel resto dell'applicazione. Inoltre, non ho bisogno di hard code/mantenere un set extra di stili e trigger di dati per ottenere l'effetto desiderato.

Problemi correlati