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


117

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

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

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

回答:


248

Width="*"列を使用する場合、利用可能なスペースを拡大するために塗りつぶします。

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

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


2
と私が使用している場合、同様のことをする方法はAutoGenerateColumns="True"
11:21にjavapowered

1
@javapowered-これを参考にして、あなた自身の質問をすることをお勧めします。
ChrisF

16
@javapowered<DataGrid AutoGenerateColumns="True" ColumnWidth="*" ItemsSource={Binding} />
ザビエル

11
@MohamedSakherSawanそれは確かにデータグリッドのために働きます。DataGridと個々の列の両方ColumnWidth="*"に望ましい効果がありますWidth="*"
Steve

1
エラーを与えるスティングを「*」に変換できない
co2f2e

18

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

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


9

述べたように、ColumnWidth="*"XAMLのDataGridにはが完全に機能しました。

私はこの文脈でそれを使用しました:

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


3

私の2セント->

パーティーに非常に遅い

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

例:DataGridをグリッドに配置->列のwidth = "Auto"、次にWidth = "*"がDataGridで機能しないが、グリッドを設定した場合->列Width = "450"は、修正された場合に正常に機能する


2

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

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

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

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


選択した回答とこれを組み合わせると、問題が解決しました。Datagrid自体の幅を削除する必要がありました。ありがとう。
ブライアンハリントン

0

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


列がデータグリッド/画面の幅全体に分割または拡大されていなくても、AutoGenerateColumnsを削除しました。グリッドの対応する行が "*"であり、列の幅に幅が指定されていません( "auto"または "some value")。しかし、私はまだ問題を抱えています、これが私のデザインのxaml
GK

0

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


0

C#の回避策を探している人のために:

あなたは「AutoGeneratedColumns」は有効になっているためにいくつかの理由のために必要がある場合は、あなたが行うことができます一つのことは、あなたが自動リサイズすることにしたいものを除き、すべての列の幅を指定することです(それがされます残りのスペースを取りませんが、それは意志にサイズを変更セルの内容)。

例(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のサイズを変更する必要があるため、私にとっては回避策として機能します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.