UniformGrid zagnieżdżony w Grid

0

Witam,

jestem w trakcie rozwiązywania pierwszego zadania z podręcznika do MCTS 70-511 Self-Training Kit. Mam przygotować kalkulator, który będzie wykorzystywał UniformGrid z przyciskami cyfr i pasek narzędziowy z funkcyjnymi przyciskami. Oba mają być zawarte w kontrolce Grid.

W załączniku zrzut ekranu aktualnej i docelowej wersji.

Utworzyłem taki XAML:

<Window x:Class="Mcts096_practice1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="30" />
            <RowDefinition Height="*" />               
        </Grid.RowDefinitions>
        <StackPanel>
            <Grid>
                <ToolBar VerticalAlignment="Top">
                    <Button>+</Button>
                    <Button>-</Button>
                    <Button>*</Button>
                    <Button>/</Button>
                    <Button>=</Button>
                    <Button>DEL</Button>
                    <TextBox></TextBox>
                </ToolBar>
            </Grid>
            <Grid>
                <UniformGrid Rows="4" Columns="1">
                    <UniformGrid Rows="1" Columns="3">
                        <Button>1</Button>
                        <Button>2</Button>
                        <Button>3</Button>
                    </UniformGrid>
                    <UniformGrid Rows="1" Columns="3">
                        <Button>4</Button>
                        <Button>5</Button>
                        <Button>6</Button>
                    </UniformGrid>
                    <UniformGrid Rows="1" Columns="3">
                        <Button>7</Button>
                        <Button>8</Button>
                        <Button>9</Button>
                    </UniformGrid>
                    <UniformGrid Rows="1" Columns="1">
                        <Button>0</Button>
                    </UniformGrid>
                </UniformGrid>
            </Grid>
        </StackPanel>
    </Grid>
</Window>

Jednak nie pojawiają się w nim przyciski z cyframi. Co należy zmienić?

Pozdrawiam!

0

Po pierwsze:
Po co ten kawałek XAMLa:

<StackPanel>
   <Grid>
     <ToolBar VerticalAlignment="Top"> [...]

i ten:

 <Grid>
                <UniformGrid Rows="4" Columns="1">
                    <UniformGrid Rows="1" Columns="3">

Stack panel jest w stanie wyświetlić od razu ToolBar i UniformGrid, bez konieczności pakowania ich w grid:
O to skrócona, działająca wersja tego XAMLa:

<Window x:Class="Mcts096_practice1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
<Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="30" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <ToolBar>
            <Button>+</Button>
            <Button>-</Button>
            <Button>*</Button>
            <Button>/</Button>
            <Button>=</Button>
            <Button>DEL</Button>
            <TextBox></TextBox>
        </ToolBar>
        <UniformGrid Rows="4" Columns="3" Grid.Row="1">
            <Button>1</Button>
            <Button>2</Button>
            <Button>3</Button>
            <Button>4</Button>
            <Button>5</Button>
            <Button>6</Button>
            <Button>7</Button>
            <Button>8</Button>
            <Button>9</Button>
            <Button>0</Button>
        </UniformGrid>
    </Grid>
</Window>

W twoim przykładzie było po prostu tego za dużo. Kilka błędów:

  • Deklarujesz Grid wraz z 2 wierszami a następnie wrzucasz do niego StackPanel, który domyślnie ląduje w pierwszy (zerowym) wierszu. Drugi wiersz jest nieużywany, bo do tego StackPanela pakujesz całą zawartość, czyli 2 gridy, które nie robią nic, tylko wyświetlają UniformGridy w środku, więc są zupełnie nadmiarowe.
  • Deklarujesz UniformGrid z 4 wierszami i 1 kolumną a do niego pakujesz jeden UniformGrid (który ląduje oczywiście w zerowej kolumnie i zerowym wierszu nadrzędnego UniformGrida), który deklaruje 1 wiersz i trzy kolumny. W efekcie faktyczna zawartość (czyli 3 przyciski np. 1, 2, 3) ląduje obok siebie wciśnięta w uniform grida, który wciśnięty jest w JEDNĄ komórkę nadrzędnego uniformgrida.

W efekcie tych błedów łayout szaleje - przestrzeń na przyciski sprowadza się do małego skraweczka ekranu (1 wiersz grida, 1 komórka uniformGrida w której, w kolejnym uniformGridzie poutykane są przyciski).

Layout w WPFie jest na prawdę prosty - dużo bardziej niż np w HTMLu i w 95% przypadków sprowadza się do 1, max 3 zagnieżdżonych layout control.

1 użytkowników online, w tym zalogowanych: 0, gości: 1