это было для меня серьезной проблемой, так как я создаю много столбцов и позволяю пользователю фильтровать, используя элементы управления фильтра в заголовке.
Когда пользователь прокручивает вправо и помещает фильтр в столбец, и по этим критериям не возвращается ни одна строка, тогда вся сетка переместится влево (все столбцы в левую позицию по умолчанию) и по горизонтали.полоса прокрутки исчезнет, поэтому пользователь не сможет прокрутить столбец фильтра, чтобы отменить свое действие !!
Серьезная боль!
"Взлом", который я только что поместил в код, является обходным путем: (_dv, указывающий на DataView из DataTable)
// construct an overall sql filter statement
string sqlFilter = _setttings.SGColumns.GetFilterSQL();
BindingListCollectionView view = CollectionViewSource.GetDefaultView(gridMain.ItemsSource) as BindingListCollectionView;
if (view != null)
view.CustomFilter = sqlFilter; // "XGROUP = 'E' AND GEOG = 'U'";
if (view != null && _dv.Count == 0)
{
gridMain.ItemsSource = null;
gridMain.Items.Add("hello");
_RowHeightTemp = gridMain.RowHeight;
gridMain.RowHeight = 0;
}
else
{
if (gridMain.Items.Count == 1 && gridMain.Items[0].ToString() == "hello")
{
gridMain.Items.Clear();
gridMain.ItemsSource = _dv;
view = CollectionViewSource.GetDefaultView(gridMain.ItemsSource) as BindingListCollectionView;
view.CustomFilter = sqlFilter;
gridMain.RowHeight = _RowHeightTemp;
}
}
Теперь это гарантирует, что сетка остается в своем точном положении, когда строки не отображаются!