web-dev-qa-db-ja.com

XAML DataGridColumnsをDataGrid全体に埋めるにはどうすればよいですか?

サイズ変更可能な列を含むXAML(Silverlightではない)でDataGridを使用しています。ユーザーが画面のサイズを変更すると、DataGridが拡張されます。

現在、すべてのDataGrid列の幅がDataGridの幅よりも小さい場合、クリックできない目的のない追加の「列」が表示されます。

残りのすべてのスペースを埋めるために常に1つの列のサイズを変更する方法を知っていますか?

109
Purplegoldfish

Width="*"を使用すると、列がいっぱいになり、使用可能なスペースが広がります。

すべての列でグリッドを均等に分割する場合、これをすべての列に適用します。残りのスペースを埋めるだけの場合は、残りを「自動」または特定の幅でその列に適用します。

列が使用可能な幅の1/4を占めるようにする場合は、Width="0.25*"(たとえば)を使用することもできます。

230
ChrisF

DataGridにWidth{Binding Path=ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window,AncestorLevel=1}}などのように設定されていることを確認してください。

そのように、Width="*"要素のDataGrid.Columns/DataGridXXXXColumn属性の設定は機能するはずです。

16
MStack

前述のように、ColumnWidth="*"はXAMLのDataGridで完璧に機能しました。

私はこのコンテキストでそれを使用しました:

<DataGrid ColumnWidth="*" ItemsSource="{Binding AllFolders, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
7

Columns Widthプロパティを*などの比例幅に設定します

6
devdigital

Horizo​​ntalAlignment = "Center"(デフォルトは "Strech")を追加し、データグリッドの幅を必要なだけにしたので問題を解決しました。 (データグリッドの幅設定がある場合は削除しました。)

enter image description here

1
JBrooks

同じテーマの別のスピン:

protected void OnWindowSizeChanged(object sender, SizeChangedEventArgs e)
{
    dataGrid.Width = e.NewSize.Width - (e.NewSize.Width * .1);

    foreach (var column in dataGrid.Columns)
    {
       column.Width = dataGrid.Width / dataGrid.Columns.Count;
    }
 }
1
Steve

C#の回避策を探している場合:

何らかの理由で「AutoGeneratedColumns」を有効にする必要がある場合、できることの1つは、自動サイズ変更したい列以外のすべての列の幅を指定することです(残りのスペース、ただしセルのコンテンツに合わせてサイズ変更します)。

例(dgShopppingCartは私のDataGridです):

dgShoppingCart.Columns[0].Visibility = Visibility.Hidden; 
dgShoppingCart.Columns[1].Header = "Qty";
dgShoppingCart.Columns[1].Width = 100;
dgShoppingCart.Columns[2].Header = "Product Name"; /*This will be resized to cell content*/
dgShoppingCart.Columns[3].Header = "Price";
dgShoppingCart.Columns[3].Width = 100;
dgShoppingCart.Columns[4].Visibility = Visibility.Hidden; 

私にとっては、ユーザーがウィンドウを最大化するときにDataGridのサイズを変更する必要があるため、回避策として機能します。

0
Exel Gamboa

1つの列の幅を任意の値に設定します。つまり、width = "*"

0
alkk

これは、AutoGeneratedColumns="True"の場合、xamlグリッドの最後の列を拡張して残りのスペースを取りません。

0
pramod

私の2セント->

パーティーに遅刻

DataGrid-> Column-> Width = "*"は、DataGrid親コンテナに固定幅がある場合にのみ機能します。

例:DataGridをGrid-> Columnに配置し、DataGridのwidth = "Auto"の後にWidth = "*"が機能しないが、Grid-> Column Width = "450"を設定した場合は正常に機能する

0