XAML DataGridColumns öğelerinin DataGrid'in tamamını doldurmasını nasıl sağlayabilirim?


117

XAML'de (Silverlight değil) DataGrids'i yeniden boyutlandırılabilir sütunlarla kullanıyorum, kullanıcı ekranı yeniden boyutlandırırsa DataGrid genişleyecektir.

Şu anda, tüm DataGrid sütunlarının genişlikleri DataGrid'in genişliğinden daha azsa, tıklanamayan ve hiçbir amaca hizmet etmeyen fazladan bir "sütun" görünür.

Kalan tüm alanı doldurmak için bir sütunun her zaman yeniden boyutlandırılmasını bilen var mı?

Yanıtlar:


248

Width="*"Sütunu kullanırsanız , kullanılabilir alanı genişletmek için dolduracaktır.

Tüm sütunların ızgarayı eşit olarak bölmesini istiyorsanız, bunu tüm sütunlara uygulayın. Yalnızca birinin kalan alanı doldurmasını istiyorsanız, geri kalanı "Otomatik" veya belirli bir genişlik olacak şekilde bu sütuna uygulayın.

Width="0.25*"Sütunun mevcut genişliğin 1 / 4'ünü kaplamasını istiyorsanız (örneğin) öğesini de kullanabilirsiniz .


2
ve kullanıyorsam benzer şey nasıl yapılır AutoGenerateColumns="True"?
javapowered

1
@javapowered - Buna atıfta bulunarak kendi sorunuzu sormanızı öneririm.
ChrisF

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

11
@MohamedSakherSawan gerçekten datagrid için çalışıyor. Hem ColumnWidth="*"üzerindeki DataGrid ve Width="*"indivdual sütunlar üzerinde istenen etkiye sahip
Steve

1
Hata verir Sting '*' dönüştürülemez
co2f2e

18

DataGrid'inizin Widthgibi bir şeye ayarlandığından emin olun {Binding Path=ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window,AncestorLevel=1}}.

Bunun gibi Width="*", DataGrid.Columns/DataGridXXXXColumnöğelerdeki öznitelik ayarınız çalışmalıdır.


9

Belirtildiği gibi, ColumnWidth="*"XAML'de bir DataGrid için mükemmel şekilde çalıştı.

Bu bağlamda kullandım:

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

7

Sütunlar Widthözelliğini orantılı bir genişlik olacak şekilde ayarlayın, örneğin*


3

Benim 2 Cent ->

Partiye çok geç

DataGrid -> Sütun -> Genişlik = "*" yalnızca DataGrid üst kapsayıcısı sabit genişliğe sahipse çalışır.

Örnek: DataGrid'i, DataGrid'de genişliği = "Otomatik" ve sonra Genişlik = "*" olan Grid -> Sütun'a koydum, ancak Grid -> Sütun Genişliği = "450" ​​değerini sabit olarak ayarlarsanız, o zaman iyi çalışır


2

Aynı temada başka bir dönüş:

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" (Varsayılan "Strech") ekledim ve sorunumu çözdü çünkü datagrid'i yalnızca gerektiği kadar geniş yaptı. (Varsa, datagrid'in Genişlik ayarı kaldırıldı.)

görüntü açıklamasını buraya girin


Seçilen cevapla birleştirildiğinde ve bu benim için problemi çözdü. Datagrid üzerindeki genişliği kaldırmam gerekiyordu. Teşekkürler.
Bryan Harrington

0

Bu, kalan alanı almak için xaml ızgarasının son sütununu genişletmeyecektir AutoGeneratedColumns="True".


Sütunlar veri ızgarasının / ekranının tüm genişliğine bölünmemiş veya uzatılmamış olsa bile, AutoGenerateColumns'u kaldırdım. Kılavuzun ilgili satırı "*" olacak ve sütun genişliği belirtilmiş herhangi bir genişliğe sahip değil ("otomatik" veya "bir değer"). Ama yine de sorunlarım var, işte pastie.org/10085815
GK

0

BİR sütunun genişliğini herhangi bir değere ayarlayın, yani genişlik = "*"


0

C # geçici çözümü arayanlar için:

Eğer etkin "AutoGeneratedColumns" sahip olmak Bazı sebeplerden dolayı, gerekirse yapabileceği tek şey otomatik o olacak (resized olmak istiyorum dışındaki tüm columns genişliğini belirtmektir kalan alanı alamaz , ama olacak şekilde yeniden boyutlandırmak hücre içeriği ).

Örnek (dgShopppingCart benim DataGrid'imdir):

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; 

Benim için bu bir geçici çözüm olarak çalışıyor çünkü kullanıcı Pencereyi büyüttüğünde DataGrid'in yeniden boyutlandırılması gerekiyordu.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.