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


117

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

현재 모든 DataGrid 열의 너비가 DataGrid의 너비보다 작 으면 클릭 할 수없고 아무 용도도없는 추가 "열"이 나타납니다.

누구든지 한 열을 항상 크기를 조정하여 나머지 공간을 모두 채우는 방법을 알고 있습니까?

답변:


248

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

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

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


2
사용하는 경우 비슷한 작업을 수행하는 방법은 AutoGenerateColumns="True"무엇입니까?
javapowered

1
@javapowered-나는 이것을 참조하여 자신의 질문을하는 것이 좋습니다.
ChrisF

16
@javapowered<DataGrid AutoGenerateColumns="True" ColumnWidth="*" ItemsSource={Binding} />
Xavier

11
@MohamedSakherSawan 실제로 데이터 그리드에서 작동합니다. 두 ColumnWidth="*"상의 데이터 그리드Width="*"indivdual 열에는 원하는 효과가
스티브

1
오류 스팅을 '*'로 변환 할 수 없음 제공
co2f2e

18

있는지 확인 데이터 그리드가있다 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}" />

7

Width속성을 다음과 같은 비례 너비로 설정합니다.*


3

내 2 센트->

파티에 매우 늦음

DataGrid-> Column-> Width = "*"는 DataGrid 상위 컨테이너에 고정 너비가있는 경우에만 작동합니다.

예 : 나는 DataGrid에 Grid-> Column에 width = "Auto"를 넣은 다음 Width = "*"를 DataGrid에 넣으면 작동하지 않지만 Grid-> Column 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

HorizontalAlignment = "Center"(기본값은 "Strech")를 추가했고 데이터 그리드를 필요한만큼만 넓게 만들었 기 때문에 문제가 해결되었습니다. (있는 경우 데이터 그리드의 너비 설정을 제거했습니다.)

여기에 이미지 설명 입력


선택한 답변과이 답변을 결합하여 문제를 해결했습니다. Datagrid 자체에서 너비를 제거해야했습니다. 감사.
Bryan Harrington

0

이 경우 xaml 그리드의 마지막 열이 확장되어 나머지 공간을 차지하지 않습니다 AutoGeneratedColumns="True".


열이 데이터 그리드 / 화면의 전체 너비로 분할되거나 늘어나지 않더라도 AutoGenerateColumns를 제거했습니다. 그리드의 해당 행이 "*"이고 열 너비에 지정된 너비가 없습니다 ( "자동"또는 "일부 값"). 하지만 여전히 문제가 있습니다. 여기 내 디자인의 xaml 코드가 있습니다. pastie.org/10085815
GK

0

한 열의 너비를 임의의 값으로 설정합니다. 즉 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.