7

フォームでDataGridを使用して、(userID、名前、残高など)のリストを表示しています。これには非常に奇妙な問題があります。一部の行の先頭(非常に20行のうちの1行)に小さな空白があり、その行の位置がずれています。空白は、行の最初のセルの直前に配置される小さな長方形のようなものです。私は自分のスタイルとすべてを見直しましたが、なぜこれが起こっているのか理解できません。これは、プログラムでDataGridをスクロールした場合にのみ発生し、スクロールが完了すると空白が表示されます。

さらに悪いことに、空白はサイズ変更可能です。マウスでサイズを変更すると、グリッドが台無しになります。私は本当にこのようなものを出荷したくありません。

私はWPFの経験があまりありません。誰かが私にどこを見ればよいかについてのアイデアを教えてくれれば、本当にありがたいです。ありがとう。


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

ここに画像の説明を入力してください

4

2 に答える 2

9

この問題は、一部のランダムな行で行ヘッダーが「表示」されることが原因で発生します。

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

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

HeadersVisibility何らかの理由で、列に設定されているにもかかわらず、行ヘッダーがまだ表示されています。

于 2012-11-19T19:02:01.973 に答える
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();
    }));


}
于 2012-11-19T18:47:03.577 に答える