2011-11-30 10 views
5

Estoy diseñando una tabla de datos, pero no puedo encontrar la forma de estilo de la cuadrícula superior izquierda de la cuadrícula de datos. Es el campo gris en esta imagen:Tabla de cuadrícula de datos de estilo - esquina superior izquierda

enter image description here

¿Conoce cómo hacerlo?

Aquí es mi estilo hasta el momento:

<Style TargetType="{x:Type DataGrid}"> 
    <Setter Property="Margin" Value="5" /> 
    <Setter Property="Background"> 
     <Setter.Value> 
      <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
       <GradientStop Color="White"/> 
       <GradientStop Color="AliceBlue" Offset="1"/> 
      </LinearGradientBrush> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="RowBackground"> 
     <Setter.Value> 
      <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
       <GradientStop Color="#BAF0FF"/> 
       <GradientStop Color="PowderBlue" Offset="1"/> 
      </LinearGradientBrush> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="AlternatingRowBackground"> 
     <Setter.Value> 
      <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
       <GradientStop Color="White"/> 
       <GradientStop Color="AliceBlue" Offset="1"/> 
      </LinearGradientBrush> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="HorizontalGridLinesBrush" Value="LightGray" /> 
    <Setter Property="VerticalGridLinesBrush" Value="LightGray" /> 
</Style> 
+1

¿Necesita el 'RowHeaders' en su ¿Cuadrícula de datos? De lo contrario, recomendaría eliminarlos por completo (configure 'HeadersVisibility =" Column "' en la etiqueta '') para que la celda de la esquina no se muestre. – Rachel

+3

Sí, los necesito. – Sulby

Respuesta

2

De esta answer yo era capaz de crear el código que establece correctamente el estilo del botón:

<DataGrid>  
    <DataGrid.Resources> 
     <Style TargetType="Button" x:Key="{ComponentResourceKey ResourceId=DataGridSelectAllButtonStyle, TypeInTargetAssembly={x:Type DataGrid}}"> 
      <Setter Property="Background" Value="Black" /> 
     </Style> 
    </DataGrid.Resources> 
</DataGrid> 
1

me dieron una solución imperfecta pero trabajando.
Puede obtener el objeto "esquina superior izquierda" de la cuadrícula de datos mediante VisualTreeHelper. que en realidad es un botón. Creo que sabes cómo hacer ahora.
Aquí está mi código de trabajo:

//Change the top left button to a CheckBox 
void StyleSelectAllButton(DependencyObject dependencyObject) 
{ 
    for (int i = 0; i < VisualTreeHelper.GetChildrenCount(dependencyObject); i++) 
    { 
     var child = VisualTreeHelper.GetChild(dependencyObject, i); 
     if ((child != null) && child is Button) 
     { 
      var grid = (Grid)VisualTreeHelper.GetChild(child, 0); 

      var checkBox = new CheckBox() 
      { 
       VerticalAlignment = VerticalAlignment.Center, 
       HorizontalAlignment = HorizontalAlignment.Center, 
      }; 

      checkBox.Click += OnCheckBoxClicked; 

      grid.Children.Clear(); 
      grid.Children.Add(checkBox); 
     } 
     else 
     { 
      StyleSelectAllButton(child); 
     } 
    } 
} 

//Action when the top left check box checked and unchecked 
void OnCheckBoxClicked(object sender, RoutedEventArgs e) 
{ 
    var checkBox = sender as CheckBox; 

    if (checkBox == null) 
    { 
     return; 
    } 

    if (checkBox.IsChecked == true) 
    { 
     //Change the 'dataGrid' to your DataGrid instance name 
     dataGrid.SelectAllCells(); 
    } 
    else 
    { 
     //Change the 'dataGrid' to your DataGrid instance name 
     dataGrid.UnselectAllCells(); 
    } 
} 
Cuestiones relacionadas