Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
discount week 80 + hiring

Diskuze: C# WPF více scén/pohledů v jednom okně

Aktivity
Avatar
Lukáš Fusek
Redaktor
Avatar
Lukáš Fusek:19.6.2016 14:19

Zdravím,
nezná někdo náhodou způsob, jak vytvořit v jednom okně více "scén" ("pohledů" chcete-li)? Například v jednom okně bych chtěl mít "uvítací scénu" (scénou myslím rozložení formulářových kontrolek v okně), poté "menu scénu", která bude odkazovat na "scénu nová hra" nebo třeba na "scénu nastavení". Dost jsem googlil, ale nedařilo se mi ze získaných informací vytvořit něco funkčního :-S . Vím, že existuje několik způsobů. Ten nejhorší je babrat se se visibility kontrolek (tomu se chci opravdu vyhnout).

 
Odpovědět
19.6.2016 14:19
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Lukáš Fusek
Petr Nymsa:19.6.2016 15:35

Nejspíš hledáš stránky- Page

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět
19.6.2016 15:35
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Lukáš Fusek
Redaktor
Avatar
Odpovídá na Petr Nymsa
Lukáš Fusek:19.6.2016 20:53

Celkem suchá odpověď :-P , ale naprosto dostatečná. Díky. Zajímavé je, že jsem viděl spoustu různých způsobů řešení mého problému, ale ani jedno z toho nebylo pomocí WPF page.

 
Nahoru Odpovědět
19.6.2016 20:53
Avatar
kotenl
Člen
Avatar
kotenl:19.6.2016 21:41

Používáš MVVM? Tohle se obvykle dělá přes DataTemplate-DataType

<Window.Resources>
      <DataTemplate DataType="{x:Type local:WelcomeViewModel}">
         <local:WelcomeView /> <!-- Tvoje view pro welcome "pohled" :)) -->
      </DataTemplate>
      <DataTemplate DataType="{x:Type local:MenuViewModel}">
         <local:MenuView /> <!-- Tvoje menu scéna -->
      </DataTemplate>
   </Window.Resources>

  <Window.Content>
    <ContentControl Content="{Binding CurrentPageViewModel}" />
  </Window.Content>

Binding framework podle typu vlastnosti CurrentPageVi­ewModel (WelcomeViewModel nebo MenuViewModel) automaticky určí ktere view se zobrazí v ContentControle. Takhle to můžeš měnit za běhu podle toho jakej typ objektu hodíš do CurrentPageVi­ewModel.

 
Nahoru Odpovědět
19.6.2016 21:41
Avatar
kotenl
Člen
Avatar
kotenl:19.6.2016 21:58

Upřímně, dělám wpf desktopový aplikace už docela dlouho, ale s Page jsem se nikdy nesetkal a ani jsem to nikde neviděl použitý.

 
Nahoru Odpovědět
19.6.2016 21:58
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Lukáš Fusek
Petr Nymsa:19.6.2016 22:46

Spěchal jsem :D
Každopádně jak už tu padlo, koukni na pattern MVVM, využij Page a případně nějaké User Controls a dosáhneš toho co potřebuješ a navíc to budeš mít dost flexibilní :)

Nahoru Odpovědět
19.6.2016 22:46
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Lukáš Fusek
Redaktor
Avatar
Odpovídá na kotenl
Lukáš Fusek:20.6.2016 0:42

Doufal jsem, že to tu někdo zmíní (myslím tím <ContentControl/>). Na tohle jsem při hledání několikrát narazil, ale už jsem si s tím neporadil. Mám ohledně toho pár otázek...
1.) Co je "WelcomeViewModel" .. okno?
2.) Co je "WelcomeView"?
3.) Jakého datového typu je vlastnost "CurrentPageVi­ewModel"?
Jsem z toho dost mimo. WPF se snažím pochopit/naučit už nějakou dobu, ale neustále narážím na věci, kterým nerozumím. :-S Přitom je ve WPF (a nově už UWP, což je prý velmi podobné WPF) takový potenciál, že se to nedá ignorovat.

 
Nahoru Odpovědět
20.6.2016 0:42
Avatar
kotenl
Člen
Avatar
kotenl:20.6.2016 9:07

Na první dvě otázky ti neodpovím, je to příliš obsáhlé téma, podivej se na ten pattern MVVM = Model-View-ViewModel.
3.) Může být klidně object, nebo ještě lépe nějaké společné rozhraní.

Editováno 20.6.2016 9:07
 
Nahoru Odpovědět
20.6.2016 9:07
Avatar
ORRNY99
Člen
Avatar
ORRNY99:20.6.2016 22:18

Nedávno jsem potřeboval něco podobného do své aplikace. Použil jsem Frame.

Když tak tady je ukázka: "Frame MVVM ":https://drive.google.com/…d3pHc0E/view?…

 
Nahoru Odpovědět
20.6.2016 22:18
Avatar
Lukáš Fusek
Redaktor
Avatar
Odpovídá na ORRNY99
Lukáš Fusek:21.6.2016 21:08

Na něco podobného už jsem narazil. Použil jsem "navigation window" a "pages"... bohužel, navigaci se chci celkově vyhnout. Snažil jsem se to obejít vypnutím navigačních funkcí (navigation baru, navigování klávesou backspace nebo třeba bočními tlačítky myši atd.). Nakonec jsem se na to vykašlal, protože snažit se potlačit všechny možné navigační funkce "navigation window" je blbost (hlavně proto, že tato třída je pro navigační aplikace vytvořena :-D). Snažím se to tedy vytvořit pomocí ContentControl.

 
Nahoru Odpovědět
21.6.2016 21:08
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.