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

C# .NET .NET (C# a Visual Basic) C# WPF více scén/pohledů v jednom okně American English version English version

Avatar
Shakul
Redaktor
Avatar
Shakul:

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  +1 19. června 14:19
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Shakul
Petr Nymsa:

Nejspíš hledáš stránky- Page

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

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. června 20:53
Avatar
kotenl
Člen
Avatar
kotenl:

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  +1 19. června 21:41
Avatar
kotenl
Člen
Avatar
kotenl:

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. června 21:58
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Shakul
Petr Nymsa:

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. června 22:46
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Shakul
Redaktor
Avatar
Odpovídá na kotenl
Shakul:

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. června 0:42
Avatar
kotenl
Člen
Avatar
kotenl:

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. června 9:07
 
Nahoru Odpovědět  +1 20. června 9:07
Avatar
ORRNY99
Člen
Avatar
ORRNY99:

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. června 22:18
Avatar
Shakul
Redaktor
Avatar
Odpovídá na ORRNY99
Shakul:

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. června 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.