1

2010年2月にリリースされたWPFツールキット(.net Framework 3.5)のDataGridコントロールを使用しており、テーブルのセルにテキストラップを設定した後、最後の行の後にDataGridが多くの空き領域で表示されていることに気付きました。

空き領域の量は行数に比例しているようです(ただし、常にそうであるとは限りません)。

行の1つを手動で削除すると、DataGridが正しく表示され、空き領域が削除されます。ただし、ロード時にコードビハインドの行を削除しても効果はなく、空き領域は引き続き表示されます。私の推測では、このトリックはDataGridがレンダリングされた後にのみ機能します。セルの内容を編集しても、サイズ変更はトリガーされません。

データグリッド

ノート:

  1. DataGridにMaxHeightを設定しようとしましたが、テキストが折り返されているため、うまく機能しません。

  2. DataGridのメソッドを上書きしましたSize MeasureOverride(Size availableSize)が、メソッドが複数回呼び出され、最初はサイズが適切であり、さらに1〜2回呼び出すとサイズが大きくなることに気付きました。またavailableSize、無限の高さを持っています。

DataGridの高さを修正する方法はありますか?

編集:

問題を紹介するために小さなデモを作成しました。プロジェクトには、WPFToolkitへの参照が必要です。

MainWindow.xaml

MainWindow.xaml.cs

1番目と2番目のDataGridに注目してください。

4

2 に答える 2

1

DataGridCellsPanelは、の誤った高さを計算しているようですDataGrid

をに置き換えることDataGridCellsPanelで、StackPanelDataGrid高さの正しい値を計算し、スペースが無駄になることはありません。

XAMLのソリューション:

<wpf:DataGrid ItemsSource="{Binding DataGridDS, ElementName=mainWindow}"
              VirtualizingStackPanel.IsVirtualizing="False">
    <wpf:DataGrid.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel />
        </ItemsPanelTemplate>
    </wpf:DataGrid.ItemsPanel>
    <wpf:DataGrid.Columns>
        <wpf:DataGridTextColumn Binding="{Binding Col1}" Width="*" />
        <wpf:DataGridTextColumn Binding="{Binding Col2}" Width="100" />
        <wpf:DataGridTextColumn Binding="{Binding Col3}" Width="100" />
    </wpf:DataGrid.Columns>
</wpf:DataGrid>

コードビハインドの解決策として、DataGridから拡張するカスタムコントロールを作成し、コンストラクターに次のコードを追加しました。

        var stackPanelFactory = new FrameworkElementFactory(typeof(StackPanel));
        var template = new ItemsPanelTemplate(stackPanelFactory);
        this.ItemsPanel = template;
于 2013-04-02T08:27:16.287 に答える
0

VerticalContentAlignmentとVerticalAlignmentをTopに設定してみましたか?

以前にこの問題が発生したことを覚えていますが、それが必要な修正であったかどうかはよくわかりません。

于 2013-03-27T15:10:17.447 に答える