2012-11-19 22 views
6

Sto utilizzando un DataGrid in un modulo per mostrare un elenco di (userID, nome, saldi, ecc.). C'è un problema molto strano con esso, all'inizio di alcune righe (una su venti righe) c'è un piccolo spazio bianco che sta causando disallineamento di quella riga. Lo spazio bianco è come un piccolo rettangolo che viene posizionato subito prima della prima cella della riga. Ho rivisto i miei stili e tutto ma non riesco a capire perché questo sta accadendo. Ciò accade solo quando si scorre il mio DataGrid al livello di programmazione, dopo che lo scorrimento è terminato compaiono gli spazi bianchi.Problema di allineamento orizzontale riga datagrid WPF

Ciò che rende le cose peggiori è che lo spazio bianco è ridimensionabile! e quando lo ridimensiono con il mio mouse si azzera la griglia. Non voglio davvero spedire qualcosa di simile.

Non ho molta esperienza in WPF, sarei davvero grato se qualcuno potesse darmi qualche idea su dove guardare. Grazie.


Edit: Ecco lo screenshot:

enter image description here

+1

Potresti pubblicare uno screenshot e del codice? Uno strumento come WPF Snoop potrebbe aiutarti a capire cosa sta succedendo. –

+0

Ottimo strumento! Ora lo sto usando per scoprire che tipo di oggetto è questa cosa! – DeveloperInToronto

risposta

7

Questo problema è causato dalle intestazioni di riga "mostrate" per alcune righe casuali.

Non so perché succede, ma fortunatamente la soluzione è semplice.

Se si imposta RowHeaderWidth="0" su DataGrid, il comportamento dovrebbe essere come previsto.

Per qualche motivo, le intestazioni di riga continuano a comparire anche se HeadersVisibility è impostato su Colonna.

+0

Grazie mille Peter! Mi hai salvato! Pensavo di aver fatto qualcosa di sbagliato e ho passato gli ultimi due giorni a esaminare ogni singola riga di codice xaml e C# che avevo. Ma non ho trovato nulla! Un bug così strano! – DeveloperInToronto

+1

Nel mio caso, questo comportamento è stato causato dalla convalida IDataErrorInfo che aumenta leggermente la larghezza RowHeader predefinita per consentire un punto esclamativo rosso (e solo sulle righe con errori). Se imposto 'RowHeaderWidth =" 11 "', rimane costante e il problema scompare. – Heliac

0

ho sperimentato lo stesso problema su più progetti, per quanto posso dire, è solo un bug ole pianura. Che è zoppo. L'unico lavoro che ho trovato è zoppo. Come super, super zoppo. Vorrei avere qualcosa di meglio, ma non lo so. Ad ogni modo, ho scoperto che quando ho ridimensionato la griglia, questi strani artefatti a scorrimento scomparivano, quindi ho scritto un codice per attivare il motore per aggiornare il layout.

Timer _timer; 

void MainWindow_Loaded(object sender, RoutedEventArgs e) 
{ 
    _timer = new Timer(1000); 
    _timer.Elapsed += _timer_Elapsed; 
    _timer.Start(); 
} 

void _timer_Elapsed(object sender, ElapsedEventArgs e) 
{ 
    //why the hell are we doing this? 
    //well, the stupid error adorners on the grid like to be mis-aligned 
    //forcing a layout to happen makes them not look off. lame, I know. 
    Dispatcher.Invoke(new Action(() => 
    { 
     MainDataGrid.Margin = new Thickness(MainDataGrid.Margin.Left, MainDataGrid.Margin.Top, MainDataGrid.Margin.Right, MainDataGrid.Margin.Bottom + 1); 
     MainDataGrid.UpdateLayout(); 

     MainDataGrid.Margin = new Thickness(MainDataGrid.Margin.Left, MainDataGrid.Margin.Top, MainDataGrid.Margin.Right, MainDataGrid.Margin.Bottom - 1); 
     MainDataGrid.UpdateLayout(); 
    })); 


}