2012-11-19 26 views
6

私は(ユーザーID、名前、残高など)の一覧を表示するためにフォームでDataGridを使用しています。それには非常に奇妙な問題があります。行の一部(20行のうちの1行)には、その行の位置がずれる原因となる小さな空白があります。空白は、行の最初のセルの直前に配置された小さな四角形のようなものです。私は自分のスタイルとすべてを見直しましたが、なぜこれが起こっているのか理解できません。これは、スクロールが完了した後、プログラムでスクロールしてDataGridをスクロールしたときにのみ発生します。WPF DataGrid行の水平方向の整列問題

何が悪化するかは、空白のサイズを変更できることです。マウスでサイズを変更すると、グリッドがネジ止めされます。私は本当にこのようなものを出荷したくない。

私はWPFで多くの経験を持っていませんが、誰かが私にどこを見なければならないか分からないと本当に感謝しています。ありがとう。


編集:ここではスクリーンショットです:

enter image description here

+1

スクリーンショットといくつかのコードを投稿できますか? WPF Snoopのようなツールは、何が起こっているか把握するのに役立ちます。 –

+0

素晴らしいツール!今私はそれを使ってこのオブジェクトがどんなタイプのオブジェクトであるかを調べています! – DeveloperInToronto

答えて

7

この問題は、いくつかのランダムな行の行ヘッダーが「表示」されているために発生します。

私はなぜそれが起こるのかわかりませんが、幸いにも修正は簡単です。

DataGridにRowHeaderWidth="0"を設定した場合、その動作は期待どおりになるはずです。

HeadersVisibilityが[列]に設定されていても、行ヘッダーがまだ表示されています。

+0

Peterありがとう!あなたは私を救いました!私は何かが間違っていると思っていました。過去2日間、私が持っていた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(); 
    })); 


} 
関連する問題