2011-10-31 20 views
6

Estoy creando una aplicación en WPF para una necesidad personalizada. Primero opté por controles personalizados, pero más tarde descubrí que gran parte de lo que necesitaba ya estaba implementado en Datagrid Control. Sin embargo hay un pequeño problema:Cómo forzar cero píxeles Gap entre celdas consecutivas en WPF DataGrid

El problema con Datagrid es que aplica un mínimo de 2 brecha pixel entre dos celdas consecutivas (1 a cada lado de la línea de cuadrícula). Por favor, eche un vistazo al siguiente diagrama para mayor claridad:

. Tenga en cuenta la diferencia de 2 píxeles forzada por la cuadrícula de datos entre las dos celdas consecutivas: http://img265.imageshack.us/img265/3545/figurem.png

(desbordamiento de pila no me permitió añadir una imagen a mi pregunta citando una política de protección de correo no deseado para los nuevos usuarios)

.

Esto no se ajusta a mi requerimiento como yo quiero el contenido que aparezca "continua" (No debe haber esta brecha de 2 píxeles; quiero las líneas de conexión a mirar "conectados"). He intentado juguetear con GridLinesVisibility, pero no ayudó. La cuadrícula de datos está organizando un control personalizado de esta manera:

<DataGrid.Columns> 
      <DataGridTemplateColumn Width="25" Header=""> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <ContentControl Content="{Binding Path=MyCustomControl}" Margin="0"></ContentControl> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 

.... 
</DataGrid.Columns> 

que he probado hasta ahora:

  1. Desconexión de la línea de cuadrícula (véase el resultado aquí: http://img263.imageshack.us/img263/8602/figure2j.png)
  2. Ajuste del margen de la propiedad de contenido a 0.
  3. Búsqueda en google y stackoverflow
  4. Ha consultado algunos libros.

pero nada parece llegar.

¿Hay una solución a este/algún artilugio o una solución o tendría que crear todo desde cero? Tengo experiencia decente con C#, pero soy nuevo en WPF.

Por favor ayuda.

Respuesta

4

Lo que hay que hacer es conseguir en el estilo DataGridCell para su cuadrícula de datos y establecer su BorderThickness a ser 0. Es difícil codificadas como 1 en el estilo por defecto, pero afortunadamente es fácil de reemplazar este:

<Style TargetType="DataGridCell"> 
    <Setter Property="BorderThickness" Value="0" /> 
</Style> 

Sugeriría poner eso en los recursos de su DataGrid por lo que solo afecta esa cuadrícula, a menos que desee que tenga un alcance más amplio que eso.

<DataGrid> 
    <DataGrid.Resources> 
     <Style TargetType="DataGridCell">...</Style> 
    </DataGrid.Resources> 
    ... 
</DataGrid> 

Hay otros lugares donde podría colocarlo también, dependiendo de sus necesidades concretas.

+0

¡Guau! ¡Eso funciono! ¡Eso me ahorró mucho tiempo! No podría pensar en esto. ¡Muchas gracias! –