2012-02-23 15 views

Respuesta

1

El color de ese rectángulo sobre la barra de desplazamiento es la propiedad de fondo de DataGrid. Así, por ejemplo, si usted quiere que sea de color amarillo se puede establecer

<DataGrid Background="Yellow" ... 

La desventaja de esto (potencialmente) es que el fondo y luego afecta a toda su cuadrícula de datos, incluyendo cualquier espacio no ocupado por las filas de datos:

enter image description here

una solución, si quería el rectángulo en cuestión a ser de color amarillo, pero no el espacio debajo de las filas de datos, podría ser el diseño de un cepillo a medida que se vuelve de color amarillo para una tira de la misma anchura que los encabezados de columna y blanco para el resto.

+0

Esta fue la mejor opción de los dos, y yo podría poner un fondo degradado allí para que se vea como yo quería que . Pensé que había intentado esto, cambiando los antecedentes en DataGrid, pero descubrí que iba a anular en el último minuto para evitar que mis cambios tuvieran efecto. :) –

+1

Genial. En caso de que te lo estés preguntando, puedes hacer un pincel con dos pinceles y sin gradiente entre los dos colocando dos paradas en el mismo lugar. Como se describe aquí: http://stackoverflow.com/questions/6546837/wpf-background-two-tone –

0

No estoy seguro si esto ayuda, pero uno de los enfoques que se han utilizado en el pasado para separar las columnas de sus cabeceras y presentarlas por separado.

Las definiciones de columna están definidos en los recursos:

<UserControl.Resources> 
    <ResourceDictionary> 
     <GridViewColumnCollection x:Key="siColumnCollection"> 
      <GridViewColumn> 
       <GridViewColumn.CellTemplate> 
        <DataTemplate> 
         ... 
        </DataTemplate> 
       </GridViewColumn.CellTemplate> 
       <GridViewColumnHeader Content="Fish"/> 
      </GridViewColumn> 
    ... 

A continuación, los encabezados y la vista de lista se presentan por separado, tanto en referencia al mismo recurso:

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <GridViewHeaderRowPresenter Columns="{StaticResource siColumnCollection}"/> 
    <ListView Grid.Row="1" ItemsSource="{Binding ViewModelList}"> 
     <ListView.Resources> 
      <DataTemplate x:Key="siNormalRowTemplate"> 
       <GridViewRowPresenter Columns="{StaticResource siColumnCollection}"/> 
      </DataTemplate> 
     </ListView.Resources> 
    </ListView> 
</Grid> 

(no puedo prometer este XAML funciona exactamente como está escrito, pero te da la idea).

La ventaja de esta disposición es que puede tratar los encabezados y el cuerpo principal de la lista por separado. Entonces, si desea agregar algo de relleno inmediatamente después de GridViewHeaderRowPresenter, puede hacerlo.

Editar: Esta solución funciona si tiene un GridView, pero desafortunadamente no funciona para DataGrid. No veo una forma equivalente de dividir el encabezado y las filas en DataGrid, por lo que esta respuesta solo funcionará si está preparado para cambiar el DataGrid por un GridView. ¡Lo siento!

5

Utilice el siguiente plantilla (el ColumnSpan hace el truco):

 <Style x:Key="{x:Type DataGridColumnHeadersPresenter}" TargetType="{x:Type DataGridColumnHeadersPresenter}"> 
      <Setter Property="Grid.ColumnSpan" Value="2" /> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type DataGridColumnHeadersPresenter}"> 
         <Grid> 
          <DataGridColumnHeader IsHitTestVisible="False" Name="PART_FillerColumnHeader"/> 
          <ItemsPresenter/> 
         </Grid> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
+1

Interesante opción, funciona pero aún puede ver un separador y un puntero de mouse de redimensionar. – Gerard

Cuestiones relacionadas