ฉันจะทำให้ XAML DataGridColumns เติมเต็ม DataGrid ทั้งหมดได้อย่างไร


117

ฉันใช้ DataGrids ใน XAML (ไม่ใช่ Silverlight) กับคอลัมน์ที่ปรับขนาดได้ 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="*"ในDataGridและWidth="*"ในคอลัมน์รายตัวมีผลตามที่ต้องการ
สตีฟ

1
ให้ Error Sting ไม่สามารถแปลงเป็น '*' ได้
co2f2e

18

ตรวจสอบให้แน่ใจ DataGrid ของคุณมีการตั้งค่าให้เป็นสิ่งที่ชอบWidth{Binding Path=ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window,AncestorLevel=1}}

เช่นนั้นการตั้งค่าWidth="*"แอตทริบิวต์ของDataGrid.Columns/DataGridXXXXColumnองค์ประกอบควรใช้งานได้


9

ตามที่ระบุไว้ColumnWidth="*"ทำงานได้ดีอย่างสมบูรณ์สำหรับ DataGrid ใน XAML

ฉันใช้มันในบริบทนี้:

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

7

ตั้งค่าWidthคุณสมบัติของคอลัมน์ให้มีความกว้างตามสัดส่วนเช่น*


3

2 เซ็นต์ของฉัน ->

สายมากไปปาร์ตี้

DataGrid -> Column -> Width = "*" จะใช้งานได้ก็ต่อเมื่อคอนเทนเนอร์หลักของ DataGrid มีความกว้างในการแก้ไข

ตัวอย่าง: ฉันใส่ DataGrid ใน Grid -> คอลัมน์ที่มี width = "Auto" แล้ว Width = "*" ใน DataGrid จะไม่ทำงาน แต่ถ้าคุณตั้งค่า Grid -> Column Width = "450" ​​mean คงที่แล้วก็ใช้ได้ดี


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.