developer tip

XAML DataGridColumns를 전체 DataGrid를 채우려면 어떻게해야합니까?

optionbox 2020. 7. 28. 08:26
반응형

XAML DataGridColumns를 전체 DataGrid를 채우려면 어떻게해야합니까?


크기 조정 가능한 열이있는 XAML (Silverlight 아님)에서 DataGrid를 사용하고 있는데 사용자가 화면 크기를 조정하면 DataGrid가 확장됩니다.

현재 모든 DataGrid 열의 너비가 DataGrid의 너비보다 작 으면 클릭 할 수 없으며 목적이없는 추가 "열"이 나타납니다.

누구든지 하나의 열이 항상 나머지 공간을 채우도록 크기를 조정하는 방법을 알고 있습니까?


Width="*"을 사용하면 사용 가능한 공간이 확장됩니다.

모든 열이 그리드를 나누려면 모든 열에 동일하게 적용하십시오. 나머지 공간을 채우려면 나머지를 "자동"또는 특정 너비로 ​​해당 열에 적용하십시오.

Width="0.25*"열이 사용 가능한 너비의 1/4을 차지 하도록하려면 (예를 들어) 사용할 수도 있습니다 .


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}" />

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;
    }
 }

xaml 격자의 마지막 열을 확장하여 나머지 공간을 차지하지는 않습니다 AutoGeneratedColumns="True".


set ONE column's width to any value, i.e. width="*"


For those looking for a C# workaround:

If you need for some reason to have the "AutoGeneratedColumns" enabled, one thing you can do is to specify all the columns's width except the ones you want to be auto resized (it will not take the remaining space, but it will resize to the cell's content).

Example (dgShopppingCart is my 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; 

For me it works as a workaround because I needed to have the DataGrid resized when the user maximize the Window.


My 2 Cent ->

Very late to party

DataGrid -> Column -> Width="*" only work if DataGrid parent container has fix width.

예 : DataGrid를 Grid-> Column에 넣습니다-DataGrid에서 width = "Auto", Width = "*"는 작동하지 않지만 Grid-> Column Width = "450"을 설정하면 제대로 작동합니다.

참고 URL : https://stackoverflow.com/questions/5028894/how-do-i-make-xaml-datagridcolumns-fill-the-entire-datagrid

반응형