Evo kratkog primera koji će ti pomoći da malo bolje razumeš pozicioniranje u WPF-u.
Kreiraj nov prozor (window). Podrazumevano program nudi Window veličine 300 x 300 koji u sebi ima Grid.
Code:
<Window x:Class="WpfApp.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
</Grid>
</Window>
U našem primeru ćemo želeti da unesemo dve Labele, dva TextBox-a i jedan Button. Da bi smo ovo uradili u Grid-u ćemo da kreiramo tri reda i dve kolone.
Da bi kreirao kolone u Grid unesi sledeći kod
Code:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
</Grid>
Ako nisi već primetio, VS ti pomaže da lakše unosiš redove. Npr. Kada ukucaš "<Grid." IntelliSense će ti ponuditi razne opcije pa kada dođeš do željene, pritisni "TAB". Kada se željena reč dopuni, dodavanjem znaka ">" će se dodati kod koji zatvara čitav XML nod.
Dalje, da bi kreiralo tri reda, unesi
Code:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
</Grid>
Kontrole se dodaju u red iznad "</Grid>" (predzadnji) i treba im podesiti atribute tako da se zna gde se tačno nalaze (Grid.Column, Grid.Row). Ovi atributi predstavljaju indekse željenog reda i kolone pa je npr. prvi red Grid.Row="0".
Code:
<Label Name="lblIme" Grid.Column="0" Grid.Row="0" Content="Ime"></Label>
Postavili smo Labelu koja se zove lblIme u prvu kolonu i prvi red Grid-a, a u njoj se nalazi tekst "Ime" (kontejnerske kontrole mogu da sadrže i npr. druge kontrole kao što reče Shadowed; mogli smo u Labelu da stavimo TextBlock ali to ostavi za kasnije).
Kada dodamo ostale kontrole kod treba da izgleda ovako:
Code:
<Window x:Class="WpfApp.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Width="300">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Label Name="lblIme" Grid.Column="0" Grid.Row="0" Content="Ime" Background="LightYellow"></Label>
<TextBox Name="txtIme" Grid.Column="1" Grid.Row="0" Background="LightCyan"></TextBox>
<Label Name="lblPrezime" Grid.Column="0" Grid.Row="1" Content="Prezime" Background="LightYellow"></Label>
<TextBox Name="txtPrezime" Grid.Column="1" Grid.Row="1" Background="LightCyan"></TextBox>
<Button Name="btnUnesi" Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="2" Content="_UNESI" Background="LightBlue"></Button>
</Grid>
</Window>
Da bi se bolje videlo podesio sam i Background atribute.
Primeti još par detalja. Button sam stavio u prvu kolonu (Grid.Column="0") trećeg reda (Grid.Row="2") i rekao da zauzme dve kolone (Grid.ColumnSpan="2").
U tekst koji sadrži Button sam stavio underscore "_" koji znači da klik dugmeta može da se izvede sa Alt+U (zato što je underscore ispred slova "U").
Izbrisao sam Height atribut Window-a pa je VS prema visini unesenih kontrola automatski podesio visinu prozora. Ovde može da ti se desi da nekada greškom ne vidiš neki red jer mu je zbog automatike Height="0".
Toliko za početak. Ostalo ćeš naučiti.
Pozdrav