サイズ変更可能な列を含むXAML(Silverlightではない)でDataGridを使用しています。ユーザーが画面のサイズを変更すると、DataGridが拡張されます。
現在、すべてのDataGrid列の幅がDataGridの幅よりも小さい場合、クリックできない目的のない追加の「列」が表示されます。
残りのすべてのスペースを埋めるために常に1つの列のサイズを変更する方法を知っていますか?
Width="*"
を使用すると、列がいっぱいになり、使用可能なスペースが広がります。
すべての列でグリッドを均等に分割する場合、これをすべての列に適用します。残りのスペースを埋めるだけの場合は、残りを「自動」または特定の幅でその列に適用します。
列が使用可能な幅の1/4を占めるようにする場合は、Width="0.25*"
(たとえば)を使用することもできます。
DataGridにWidth
が{Binding Path=ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window,AncestorLevel=1}}
などのように設定されていることを確認してください。
そのように、Width="*"
要素のDataGrid.Columns/DataGridXXXXColumn
属性の設定は機能するはずです。
前述のように、ColumnWidth="*"
はXAMLのDataGridで完璧に機能しました。
私はこのコンテキストでそれを使用しました:
<DataGrid ColumnWidth="*" ItemsSource="{Binding AllFolders, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
Columns Width
プロパティを*
などの比例幅に設定します
HorizontalAlignment = "Center"(デフォルトは "Strech")を追加し、データグリッドの幅を必要なだけにしたので問題を解決しました。 (データグリッドの幅設定がある場合は削除しました。)
同じテーマの別のスピン:
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;
}
}
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のサイズを変更する必要があるため、回避策として機能します。
1つの列の幅を任意の値に設定します。つまり、width = "*"
これは、AutoGeneratedColumns="True"
の場合、xamlグリッドの最後の列を拡張して残りのスペースを取りません。
私の2セント->
パーティーに遅刻
DataGrid-> Column-> Width = "*"は、DataGrid親コンテナに固定幅がある場合にのみ機能します。
例:DataGridをGrid-> Columnに配置し、DataGridのwidth = "Auto"の後にWidth = "*"が機能しないが、Grid-> Column Width = "450"を設定した場合は正常に機能する