Uczę się właśnie WPF'a i chciałbym od razu wejść w architekturę MVVM.
(nie zajmuję się zawodowo programowaniem, to hobbystyczne zajęcie w którym czasami "popełniam" narzędzia do swojej obecnej pracy - inż. procesu w firmie produkcyjnej, dotychczas pisałem tylko w WinForms w którym bardziej lub mniej ale przeważnie używałem wzorca Model View Prezenter)
Teraz przy podejściu do programowania w WPF jestem na etapie przygotowania layoutu okna głównego i główne cele są takie:
1) cała logika ma być w XAMLu
2) z lewej strony ma być chowane lub wysuwane menu (chowanie i wysuwanie ma się odbywać poprzez naciśnięcie "różowego klawisza")
3) w oknie głównym mają się pojawiać odpowiednie widoki w zależności który klawisz z lewego menu się kliknie
Na razie ogarnąłem podstawy podstaw XAML'a i mam tak:
<DockPanel>
<Grid Background="Blue" DockPanel.Dock="Top" Height="30"> </Grid>
<Grid Background="Yellow" DockPanel.Dock="Bottom" Height="30"> </Grid>
<StackPanel Background="Orange" DockPanel.Dock="Left" Width="150">
<Button VerticalAlignment="Center" Margin="3" Height="40">
<Grid Margin="2" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="30" ></ColumnDefinition>
<ColumnDefinition Width="110"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Image HorizontalAlignment="Left" VerticalAlignment="Center" Source="/Grafiki/Ikonki/1.png" Margin="2,2,2,2" Grid.Column="0"></Image>
<TextBlock TextWrapping="Wrap" TextAlignment="Left" VerticalAlignment="Center" Grid.Column="1">Opcja z długim tekstem 1</TextBlock>
</Grid>
</Button>
<Button VerticalAlignment="Center" Margin="3" Height="40">
<Grid Margin="2" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="30" ></ColumnDefinition>
<ColumnDefinition Width="110"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Image HorizontalAlignment="Left" VerticalAlignment="Center" Source="/Grafiki/Ikonki/2.png" Margin="2,2,2,2" Grid.Column="0"></Image>
<TextBlock TextWrapping="Wrap" TextAlignment="Left" VerticalAlignment="Center" Grid.Column="1">Opcja 2</TextBlock>
</Grid>
</Button>
<Button VerticalAlignment="Center" Margin="3" Height="40">
<Grid Margin="2" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="30" ></ColumnDefinition>
<ColumnDefinition Width="110"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Image HorizontalAlignment="Left" VerticalAlignment="Center" Source="/Grafiki/Ikonki/3.png" Margin="2,2,2,2" Grid.Column="0"></Image>
<TextBlock TextWrapping="Wrap" TextAlignment="Left" VerticalAlignment="Center" Grid.Column="1">Opcja 3</TextBlock>
</Grid>
</Button>
</StackPanel>
<Button DockPanel.Dock="Left" Background="pink" Width="10"></Button>
<Grid Background="green">
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" TextWrapping="Wrap">to jest okno główne które ma się rozsuwac po schowaniu menu z lewego StackPanelu, a nastepnie po wysunieciu lewego menu ma sie zwezic</TextBlock>
</Grid>
</DockPanel>
Wygląda to tak (kolory są dodane tylko żeby rozróżniać odpowiednie bloki)
Pytania:
Ad2. w WinForms robiłem to poprzez umieszczenie klawisza z treścią ">>>" lub "<<<" w zależności czy menu było pokazane czy nie (oczywiście we właściwych UserControl'ach które dawały responsywne okno) ale w WinForms całą logikę tego menu miałem obsługiwaną zdarzeniami z poziomu kodu okna głównego tutaj chciałbym się dowiedzieć:
2.1. czy taka logika jest do zrobienia tylko w XAMLu?
2.2. a jeżeli tak to przynajmniej nakierujcie mnie jak to zrobić ewentualnie gdzie szukać sposobów na uzyskanie takiego zachowania?
Ad3 w WinForms takie pokazujące się widoki robiłem poprzez generowanie/wstawianie właściwych formatek UserControl w widoku okna głównego. Tutaj myślę o tym aby te różne widoki komponowąc na kolejnych Gridach ułożonych jeden na drugim a widoczność właściwemu widokowi dawać na podstawie ustawianej właściwości "Visible" zbindowanej z klawiszem z menu.
3.1. czy tak się robi?
3.2. jakie są inne sposoby na zrobienie takiej logiki tylko w XAML'u?