The FilterColumn method does not position the filtering popup on the passed column index when it is opened.
A workaround to this behavior would be to manually position the filtering popup using the following approach:
this.virtualGrid.FilterColumn(2);
var virtualizingCanvasBase = this.virtualGrid.ChildrenOfType<VirtualizingCanvasBase>().FirstOrDefault();
var columnsRenderInfoInfo = virtualizingCanvasBase.GetType().GetProperty("ColumnsRenderInfo", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
var columnsRenderInfo = columnsRenderInfoInfo.GetValue(virtualizingCanvasBase);
var offsetMethodInfo = columnsRenderInfo.GetType().GetMethod("OffsetFromIndex");
var filteringPopupPropertyInfo = this.virtualGrid.GetType().GetProperty("FilteringPopup", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
Popup filteringPopup = (Popup)filteringPopupPropertyInfo.GetValue(this.virtualGrid);
filteringPopup.HorizontalOffset = (double)offsetMethodInfo.Invoke(columnsRenderInfo, new object[1] { 2 });
The FilterColumn method should be called, in order for the filtering Popup to be created.
HeaderSizeNeeded is fired twice with the same index and affects the header row width.
The CellDecorationsNeeded event isn't raised for pinned columns/rows
I would expect this event would be raised regardless of pinned state. Otherwise the UI would not be consistent when columns/rows are pinned.
// SomeVirtualGrid.xaml.cs
public SomeVirtualGrid()
{
InitializeComponent();
vg.PinColumnLeft(0);
vg.PinColumnLeft(1);
vg.PinColumnLeft(2);
}
Cell contents are missing when the header size is assigned through the e.Size property of the HeaderSizeEventArgs in the HeaderSizeNeeded event handler of RadVirtualGrid.
This happens only for some of the cells and when the viewport has many rows and columns.
To work this around, instead of setting the header size in the HeaderSizeNeeded event handler, use the ColumnWidth property of RadVirtualGrid.
<telerik:RadVirtualGrid ColumnWidth="50" />