Geek tričko zdarma Python týden
Tričko zdarma! Stačí před dobitím bodů použít kód TRIKO15. Více informací zde
Pouze tento sleva až 80% na kurzy Python
Avatar
Filip Štěpán:15. března 11:19

Ahoj,
rád bych věděl, jak je možné zobrazovat další okna v nejaké části MainWindow. Nejde mi o to, jak si napsat mřížku nebo podobné věci ale přímo o inicializaci hned při startu, čili přes žádné tlačítko a zbytečnou logiku okolo. Asi se to dá pohodlně vyřešit přes frame, nicméně po zdlouhavém googlení mi nic z nalezených nefungovalo, tak se obracím na Vás.

Zkusil jsem: spoustu věcí, většinou VS vyhazuje problém s nalezením daného okna. Kupodivu"" Zdroják mám zatím jen v XAML, začínám projekt.

Chci docílit: Zobrazení okna v okně. Tzn. při startu aplikace dojde k inicializaci nového okna, následně pak bude možno při stisknití některého z tlačítek volat jiné okno, které bude obsahovat nastavení pro dané tlačítko. ( to vše v jednom StackPanelu hlavního okna).

 
Odpovědět 15. března 11:19
Avatar
krepsy3
Redaktor
Avatar
krepsy3:15. března 14:25

Na to se používá WPF Page. Je to v podstatě totéž, jako okno, ale nemá to property, které jsou vlastní oknu, jako je window border style nebo title. Jinak se to chová nemlich stejně, můžeš v tom defacto napsat xaml okno, je to normální. V aplikaci se pak WPF Page zobrazuje v kontrolce PageView, kterou si do okna umístíš tam, kde chceš mít "vnitřní okno" zobrazené.

Pokud potřebuješ vykonat nějaký kód v rámci inicializace, pak si rozklikni soubor App.xaml. Nahoře v propertách smaž StartupUri="Ma­inWindow.xaml" a napiš tam Startup="OnStar­tup".

Pak se přesuň do souboru App.xaml.cs a přidej si metodu na vykonání.

private void OnStartup(object sender, StartupEventArgs e)
{
        //tvůj potřebný kód

        Window w = new MainWindow();
        w.Show();
}
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět  +1 15. března 14:25
Programátor je stroj k převodu kávy na kód.
Avatar
Ilja Židkov
Člen
Avatar
Odpovídá na krepsy3
Ilja Židkov:15. března 14:36

Dalo by se použít i UserControl?

 
Nahoru Odpovědět 15. března 14:36
Avatar
krepsy3
Redaktor
Avatar
Odpovídá na Ilja Židkov
krepsy3:15. března 22:09

Určitě dalo. Ten význam odlišující Page a UserControl je vyloženě sémantický, zatímco page je nějaká větší část aplikace (jedno z mnoha "pod oken" aplikace, např. menu, obrazovka s nastavením...) tak UserControl je opravdu myšleno jako dílčí část aplikace, stejně jako ostatní Controls jako CheckBox, Textbox atd. Počítá se tedy s tím, že page je nějaký větší celek kontrolek sdružující jednu funkcionalitu, který se v aplikaci vyskytne právě jednou. Naopak UserControl je menší strukturka, která se může vyskytnout opakovaně, stejně jako ostatní kontrolky.

Proto je také Page potomek
Visual Ui Element -> Framework Element -> Page,

Controlka je potomek
Visual Ui Element -> Framework Element -> Control -> Content Control -> UserControl.

UserControl tak není problém zobrazit v jakémkoliv kontejneru na kontrolky, či jako dítě jiných kontrolek, které mohou mít dítě vnořeno.

Naopak Page by se správně měla zobrazovat pouze v rámci PageView.

Zdroj - MSDN, Vlastní znalost

Nahoru Odpovědět  +1 15. března 22:09
Programátor je stroj k převodu kávy na kód.
Avatar
JerryM
Člen
Avatar
JerryM:16. března 16:18

tady to máš a řiká se tomu child window a dá se to udělat i dynamicky protože stačí přehodit vlastníka - parent a pár dalších atributů.

https://stackoverflow.com/…-main-window

 
Nahoru Odpovědět  ±0 16. března 16:18
Avatar
krepsy3
Redaktor
Avatar
Odpovídá na JerryM
krepsy3:17. března 11:56

Už v zadání dotazu týpek píše, že je to ve WPF obsoletní... přesně k tomuhle slouží Page a PageViewer, tak nevím, proč používat takovýhle externí nesmysly...

Nahoru Odpovědět 17. března 11:56
Programátor je stroj k převodu kávy na kód.
Avatar
 
Nahoru Odpovědět 21. března 11:31
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 7 zpráv z 7.