2011-10-31 9 views
6

Sto costruendo un'applicazione in WPF per un'esigenza personalizzata. Per prima cosa ho optato per i controlli personalizzati, ma in seguito ho capito che gran parte di ciò di cui avevo bisogno era già implementato in Datagrid Control. Tuttavia c'è un piccolo inconveniente:Come forzare zero pixel Gap tra celle consecutivi in ​​WPF DataGrid

Il problema è che Datagrid impone un minimo di 2 gap pixel tra due celle consecutive (1 su ciascun lato della linea di griglia). Si prega di dare un'occhiata al seguente diagramma per chiarezza:

. Si prega di notare il divario 2 pixel imposto dal DataGrid tra le due celle consecutive: http://img265.imageshack.us/img265/3545/figurem.png

(Stack Overflow non mi permetteva aggiungi alla mia domanda citando una politica di protezione anti-spam per i nuovi utenti)

.

Questo non è adatto alle mie esigenze in quanto voglio che il contenuto appaia "continuo" (non ci deve essere questo intervallo di 2 pixel, voglio che le linee di collegamento sembrino "connesse"). ho provato a fidarsi di GridLinesVisibility, ma non è stato d'aiuto. Il DataGrid ospita un controllo personalizzato come questo:

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

.... 
</DataGrid.Columns> 

ho finora provato:

  1. Spegnimento della griglia (vedi risultato qui: http://img263.imageshack.us/img263/8602/figure2j.png)
  2. Impostazione del margine di proprietà content a 0.
  3. Ricerca google e stackoverflow
  4. Consultati alcuni libri.

ma nulla sembra venire.

C'è una soluzione a questo/qualche trucco o una soluzione alternativa o dovrei creare tutto da zero? Ho esperienza decente con C#, ma sono nuovo di WPF.

Si prega di aiuto.

risposta

4

Quello che dovete fare è ottenere presso lo stile DataGridCell per il DataGrid e impostare la sua BorderThickness a 0. E 'hard-coded come 1 nello stile di default, ma per fortuna è facile ignorare questo:

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

Suggerirei di inserirlo nelle risorse del vostro DataGrid in modo che abbia effetto solo su quella griglia, a meno che non vogliate che abbia un ambito più ampio di quello.

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

Ci sono altri posti in cui potresti metterlo, a seconda delle tue precise esigenze.

+0

Wow! Ha funzionato! Questo mi ha fatto risparmiare un sacco di tempo! non potevo pensarci. Molte grazie! –