2009-11-20 2 views

Antwort

186

In einem WPF-Grid, Width="*" oder Height="*" bedeutet proportional Sizing.
Zum Beispiel: -

<ColumnDefinition Width="3*" /> 
<ColumnDefinition Width="7*" /> 

enter image description here

Und ebenfalls für Reihen - 30% bis Spalte 1 und 70% bis Spalte 2 geben

<RowDefinition Height="3*" /> 
<RowDefinition Height="7*" /> 

Die Zahlen müssen nicht sein ganze Zahlen.
Wenn die Breite für RowDefinition (Höhe für ColumnDefinition) weggelassen wird, wird 1 * impliziert.
In diesem Beispiel ist die Spalte 1 das 1,5-fache breiter ist als Spalte 2 -

<ColumnDefinition Width="1.5*" /> 
<ColumnDefinition /> 

Column 1: 1.5*, Column 2 1* (implied)

Sie können mit einem * (proportional) Breiten automatisch anpassen und festen Breiten mischen;

<Grid.ColumnDefinitions> 
    <ColumnDefinition Width="Auto" /> <!-- Auto-fit to content, 'Hi' --> 
    <ColumnDefinition Width="50.5" /> <!-- Fixed width: 50.5 device units) --> 
    <ColumnDefinition Width="69*" /> <!-- Take 69% of remainder --> 
    <ColumnDefinition Width="31*"/> <!-- Take 31% of remainder --> 
</Grid.ColumnDefinitions> 
<TextBlock Text="Hi" Grid.Column="0" /> 

enter image description here

+6

Ausgezeichnete Antwort! – smwikipedia

+1

macht völlig Sinn. – user3260977

29

Wenn Sie 2 Spalten wie folgt aus:

<ColumnDefinition Width="10*"/> 
<ColumnDefinition Width="*"/> 

es bedeutet, dass die erste Spalte 10x breiter als der zweite. Es ist wie "10 Teile Spalte 1 und 1 Teil Spalte 2" zu sagen.

Das coole daran ist, dass Ihre Spalten die Größe proportional ändern. Andere Optionen sind:

//Take up as much space as the contents of the column need 
<ColumnDefinition Width="Auto"/> 
//Fixed width: 100 pixels 
<ColumnDefinition Width="100"/> 

Hoffe, dass hilft!

2

Zusätzlich können Sie das "*" weglassen, wenn dies das Element der Einheitsgröße ist. So Pwninstein des Codebeispiel verwenden, wäre es nur sein:

<ColumnDefinition Width="10*/> 
<ColumnDefinition/> 
6

wir nehmen folgende Beispiel .....

ein Gitter - in diesem Fall werden die * Spalten an den Rest, nachdem die Auto-Sitz und feste Breiten berechnet wurden aufgeteilt und verfügt über 3 Spalten und enthalten jeweils eine Taste der Größe 100.

enter image description here

XAML-Code ist ...

<Grid x:Name="LayoutRoot" Width="600"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="3*" /> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 
    <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="10,10,0,0" Name="button1" VerticalAlignment="Top" Width="100" /> 
    <Button Content="Button1" Height="23" HorizontalAlignment="Left" Margin="0,10,0,0" Name="button2" VerticalAlignment="Top" Width="100" Grid.Column="1" /> 
    <Button Content="Button2" Height="23" HorizontalAlignment="Left" Margin="0,10,0,0" Name="button3" VerticalAlignment="Top" Width="100" Grid.Column="2" /> 
</Grid> 

Aber eigentlich ist seine Größe ....

<Grid.ColumnDefinitions> 
     <ColumnDefinition Width="375" /> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition Width="125" /> 
</Grid.ColumnDefinitions> 

Fazit:

Gesamtgröße des Gitters 600

"Auto": Spalte ist damit die Größe neu ist enthält.(2. Spalte hat Knopf der Breite 100)

"*": 1. Spaltenbreite ist 3x der 3. Spalte.