2012-11-19 2 views
6

Я использую DataGrid в форме, чтобы показать список (идентификатор пользователя, имя, баланс и т. Д.). С ним очень странная проблема: в начале некоторых строк (одна из двадцати строк) есть небольшое белое пространство, которое вызывает смещение строки. Белое пространство похоже на маленький прямоугольник, который помещается прямо перед первой ячейкой строки. Я просмотрел свои стили и все, но не могу понять, почему это происходит. Это происходит только тогда, когда я программно прокручиваю свой DataGrid, после выполнения прокрутки появляются пробелы.WPF datagrid row horizontal alignment issue

Что еще хуже, так это то, что пустое пространство можно изменять! и когда я изменяю его с помощью мыши, он закручивает сетку. Я действительно не хочу отправлять что-то подобное.

У меня нет большого опыта работы в WPF, я был бы очень признателен, если бы кто-нибудь мог дать мне некоторое представление о том, где искать. Благодарю.


Edit: Вот скриншот:

enter image description here

+1

Не могли бы вы опубликовать скриншот и некоторый код? Такой инструмент, как WPF Snoop, поможет вам понять, что происходит. –

+0

Отличный инструмент! Теперь я использую его, чтобы узнать, какой тип объекта есть эта вещь! – DeveloperInToronto

ответ

7

Эта проблема вызвана тем, что заголовки строк «показаны» для некоторых случайных строк.

Я не знаю, почему это происходит, но, к счастью, исправление прост.

Если вы установили RowHeaderWidth="0" в DataGrid, поведение должно быть таким, как ожидалось.

По какой-то причине заголовки строк все еще появляются, хотя HeadersVisibility установлен в колонку.

+0

Большое спасибо! Вы спасли меня! Я думал, что сделал что-то не так, и провел последние два дня, чтобы пройти через каждую строку кода xaml и C#, которые у меня были. Но я ничего не мог найти! Такая странная ошибка! – DeveloperInToronto

+1

В моем случае это поведение было вызвано проверкой IDataErrorInfo, слегка увеличивающей ширину RowHeader по умолчанию, чтобы разрешить красный восклицательный знак (и только в строках с ошибками). Если я устанавливаю 'RowHeaderWidth =" 11 "', он остается постоянным, и проблема исчезает. – Heliac

0

Я испытал тот же вопрос на нескольких проектах, насколько я могу судить, это просто обычная оле ошибка. Который хромой. Единственная работа, которую я нашел, хромает. Как супер, супер хромой. Мне жаль, что у меня не было чего-то лучшего, но я этого не делаю. Во всяком случае, я обнаружил, что когда я изменил размер сетки, эти странные артефакты прокрутки исчезнут, поэтому я написал код для запуска механизма для обновления макета.

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(); 
    })); 


}