Anniversary - BF C/C++ week
80 % bodů zdarma na online výuku díky naší Narozeninové akci!
Pouze tento týden sleva až 80 % na e-learning týkající se C/C++

Diskuze: zobrazení okna v části hlavního okna (WPF)

Aktivity (4)
Avatar
Filip Štěpán:15.3.2019 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.3.2019 11:19
Avatar
krepsy3
Editor
Avatar
krepsy3:15.3.2019 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
15.3.2019 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.3.2019 14:36

Dalo by se použít i UserControl?

 
Nahoru Odpovědět
15.3.2019 14:36
Avatar
krepsy3
Editor
Avatar
Odpovídá na Ilja Židkov
krepsy3:15.3.2019 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
15.3.2019 22:09
Programátor je stroj k převodu kávy na kód.
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
JerryM
Člen
Avatar
JerryM:16.3.2019 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
16.3.2019 16:18
Avatar
krepsy3
Editor
Avatar
Odpovídá na JerryM
krepsy3:17.3.2019 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.3.2019 11:56
Programátor je stroj k převodu kávy na kód.
Avatar
 
Nahoru Odpovědět
21.3.2019 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.