wpftoolkit - WPF DataGrid doesn't shrink when column width shrinks -


i using datagrid in wpf , want shrink fit width of columns. nicely initial rendering. when resize column make wider grid grows well. if resize column make narrower again white space on right side of column (and can see column header grey area extended beyond columns.

i have data grid shrink width columns don't white space on right. have tried debug code , far can see problem in datagridcellspanel, can't see anyplace fix width measurement.

any appreciated.

i had problem while , getting annoyed made ugly fix it. it's not pretty, gets job done. first, problem when horizontal scrollbar invisible we're gonna need reference it. code have run once datagridcolumns have been loaded (in case, in xaml, loaded event) , doesn't take adding/removing of datagridcolumns consideration that's easy fix.

<datagrid name="c_datagrid"           loaded="c_datagrid_loaded"           ...>     <datagrid.columns>         <datagridtextcolumn ..."/>         <datagridtextcolumn ..."/>         <!-- ... --> 

then in loaded eventhandler datagrid scrollviewer , add listener changes in actualwidthproperty of every datagridcolumn in datagrid.

private scrollviewer m_datagridscrollviewer = null; private void c_datagrid_loaded(object sender, routedeventargs e) {     m_datagridscrollviewer = getvisualchild<scrollviewer>(c_datagrid);     dependencypropertydescriptor dependencypropertydescriptor =         dependencypropertydescriptor.fromproperty(datagridcolumn.actualwidthproperty, typeof(datagridcolumn));     if (dependencypropertydescriptor != null)     {         foreach (datagridcolumn column in c_datagrid.columns)         {             dependencypropertydescriptor.addvaluechanged(column, datagridcolumn_actualwidthchanged);         }     } } 

and compute size of datagrid size of datagridcolumns , add constant of 8.0 (which difference normally).

private void datagridcolumn_actualwidthchanged(object sender, eventargs e) {     if (m_datagridscrollviewer != null)     {         if (m_datagridscrollviewer.computedhorizontalscrollbarvisibility != visibility.visible)         {             double datagridwidth = 8.0;             foreach (datagridcolumn column in c_datagrid.columns)             {                 datagridwidth += column.actualwidth;             }             c_datagrid.width = datagridwidth;         }         else         {             c_datagrid.width = double.nan;         }     } } 

if come better way of doing let me know :)

public static t getvisualchild<t>(object parent) t : visual {     dependencyobject dependencyobject = parent dependencyobject;     return internalgetvisualchild<t>(dependencyobject); } private static t internalgetvisualchild<t>(dependencyobject parent) t : visual {     t child = default(t);      int numvisuals = visualtreehelper.getchildrencount(parent);     (int = 0; < numvisuals; i++)     {         visual v = (visual)visualtreehelper.getchild(parent, i);         child = v t;         if (child == null)         {             child = getvisualchild<t>(v);         }         if (child != null)         {             break;         }     }     return child; } 

Comments

Popular posts from this blog

android - Spacing between the stars of a rating bar? -

aspxgridview - Devexpress grid - header filter does not work if column is initially hidden -

c# - How to execute a particular part of code asynchronously in a class -