2012-03-27 7 views
0

Ich arbeite an der Implementierung der Größenanpassung in WPF DataGrid, es unterstützt die Größenanpassung über Spalten-/Zeilenköpfe, aber ich möchte Größenanpassungen an Rasterlinien zulassen.Hinzufügen von DataGrid-Größenänderungsfunktionen

So kann der Benutzer Zeilen/Spalten von überall im DataGrid neu skalieren. Ich war in der Lage, die Funktionalität zu implementieren und es funktioniert gut für Spalten, aber im Falle von Zeilen ist es vermasselt.

Sie können die Größe einer Zeile über die Kopfzeile ändern. Sie können die Größe auch durch jede Zelle dieser Zeile ändern, aber wenn Sie sie zusammen verwenden, dh wenn Sie die Größe einer Zeile durch eine Zelle geändert haben Zeilenkopf würde aufhören zu arbeiten (zeigt seltsames Verhalten). Hier ist, wie es aussieht (beachten Sie die gebrochenen Gitterlinien ...) -

enter image description here

ich geschaffen habe, um eine Probe dieses Verhalten zu reproduzieren -

WPF Toolkit DataGrid Sample - Adding GridLines Resizing

zum Reproduzieren des Problems

  1. Größe einer Zeile durch Rasterlinien (beliebige Zelle) und dann

  2. Ändern Sie die Größe der Zeile durch die Zeilenüberschrift.

wird jede Art von Hilfe zu schätzen wissen. statt Row

Dank

Antwort

0

löste ich das Problem, indem die Höhe der CellPresenter Einstellung. Hier ist der Hauptcodeblock -

double newHeight = cellsPresenter.ActualHeight + e.VerticalChange;  
DataGridRowHeader rowHeader = GetFirstVisualChild<DataGridRowHeader>(row);  
if (rowHeader != null)  
{ 
    // clamp the CellsPresenter size to the MaxHeight of Row, 
    // because row wouldn't grow any larger 
    double maxHeight = row.MaxHeight; 
    if (newHeight > maxHeight) 
    { 
     newHeight = maxHeight; 
    } 
} 

cellsPresenter.Height = newHeight; 

// Updating row's height doesn't work correctly; shows weird behavior  
// row.Height = newHeight >= 0 ? newHeight : 0; 

Ich habe hier über diese im Detail gebloggt -

WPF DataGrid Customization: Resizing Row/Column through DataGridCell gridlines