2012-11-19 98 views
6

我使用的形式DataGrid中顯示的(用戶ID,姓名,餘額等)的列表。有一個非常奇怪的問題,在一些行的開頭(非常二十行中的一行)存在一個小的空白,導致該行未對齊。白色空間就像是放置在行的第一個單元格之前的一個小矩形。我回顧了我的風格和一切,但無法弄清楚爲什麼會發生這種情況。這隻有當我編程滾動我的DataGrid時,滾動完成後出現空格纔會發生。WPF DataGrid行水平對齊問題

更爲糟糕的是,白色的空間可以調整大小!當我用鼠標調整它的大小時,它會將網格擰緊。我真的不想發佈這樣的東西。

我沒有在WPF很多經驗,我會很感激,如果有人可以給我約到哪裏尋找一些想法。謝謝。


編輯:下面是截圖:

enter image description here

+1

你可以發佈截圖和一些代碼?像WPF Snoop這樣的工具可以幫助你弄清楚發生了什麼。 –

+0

偉大的工具!現在我用它來找出這個東西是什麼類型的對象! – DeveloperInToronto

回答

7

此問題是由某些隨機行「顯示」行標題引起的。

我不知道爲什麼會發生,但幸運的是解決方法是簡單的。

如果您在DataGrid上設置RowHeaderWidth="0",應該按預期的行爲。

出於某種原因,行標題仍然使得即使HeadersVisibility設置爲列的外觀。

+0

非常感謝彼得!你救了我!我以爲我做了錯誤的事情,並且我花了兩天時間瀏覽每一行xaml和C#代碼。但我找不到任何東西!這樣一個奇怪的錯誤! – DeveloperInToronto

+1

在我的情況下,這種行爲是由IDataErrorInfo驗證稍微增加默認的RowHeader寬度以允許紅色感嘆號(並且僅在具有錯誤的行上)引起的。如果我設置了'RowHeaderWidth =「11」',它將保持不變並且問題消失。 – Heliac

0

我已經經歷了多個項目上同樣的問題,據我所知,這只是一個普通的OLE錯誤。這是跛腳。我發現的唯一工作就是跛腳。像超級,超級跛腳。我希望我有更好的東西,但我沒有。無論如何,我發現當我調整網格大小時,這些奇怪的滾動工件會消失,所以我編寫了一些代碼來觸發引擎更新佈局。

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


}