Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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í.

Diskuze: WPF - navigace JEDNODUSE ve stejnem okne

Aktivity
Avatar
MartinMa
Člen
Avatar
MartinMa:11.5.2014 11:17

Cau prosim vas o radu zacatecnikovi . ve WPF chci kdyz kliknu na tlacitko aby se mi zmenil obsah stavajiciho okna ( ne okno.Show() ) , ale v tom mainwindow. Jak nejjednoduseji to muzu udelat , na internetu jsem nasel zpusob pres usercontrol, ale moc tomu nerozumim vite nekdo o nejaky strance kde je to dobre popsane?

 
Odpovědět
11.5.2014 11:17
Avatar
Paradise
Tvůrce
Avatar
Paradise:11.5.2014 11:39

Můžeš použít TabControl a přepínat mezi taby, viz http://www.itnetwork.cz/…rms-poctvrte a nebo si naklikej překrývající se Gridy a měň u nich viditelnost. Visibility.Visible či Collapsed.

 
Nahoru Odpovědět
11.5.2014 11:39
Avatar
MartinMa
Člen
Avatar
Odpovídá na Paradise
MartinMa:11.5.2014 13:02

Super to s tema tabama se mi líbí, to zkusím a prosím tě co by jsi mi ještě poradil když bych chtel udelat nějáky menu 2 sloupce , v levym bych mel buttony a když bych na nejaky kliknul tak aby se mi zmenil obsah toho praveho sloupce. ale vse vylo v jednom okne. Díky

 
Nahoru Odpovědět
11.5.2014 13:02
Avatar
Odpovídá na MartinMa
Michal Štěpánek:11.5.2014 13:24

Jaký "obsah okna" máš na mysli (labely?, obrázky?, pozadí?,...) a jaké "změny" by se po stisku tlačítka měly provést?

Nahoru Odpovědět
11.5.2014 13:24
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Michal Žůrek - misaz:11.5.2014 13:25

děláš instalátor?

 
Nahoru Odpovědět
11.5.2014 13:25
Avatar
MartinMa
Člen
Avatar
Odpovídá na Michal Štěpánek
MartinMa:11.5.2014 14:18

No pro me by bylo uplne idealni abych tam moh dat cokoli. v podstate aby to delalo to stejny jako kdybych udelal new window, akorat ze by se to neotevrelo v novem okne ale v pravym sloupci.

 
Nahoru Odpovědět
11.5.2014 14:18
Avatar
Odpovídá na MartinMa
Michal Štěpánek:11.5.2014 14:29

Tos to moc neupřesnil... Ptal jsem se, co chceš měnit, protože asi obrázek budeš blbě dostávat do labelu apod...

Nahoru Odpovědět
11.5.2014 14:29
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
MartinMa
Člen
Avatar
MartinMa:11.5.2014 14:32

No chci abz se podle kliknuti na tlacitko menil jen ten druhej druhej sloupec , a do nej abzch moh psat treba text s pridavat dalsi kontrolky

 
Nahoru Odpovědět
11.5.2014 14:32
Avatar
MartinMa
Člen
Avatar
Odpovídá na Michal Štěpánek
MartinMa:11.5.2014 14:34

Mzslel jsem ye existuje neco jako New window , ale kterz se neotevre v novzm okne, ale v tom stavajicim nebo pripadne tam kde mu urcim, treba v druhzm sloupci kdzy ten formular budu mit roydelenej na dva sloupce.

 
Nahoru Odpovědět
11.5.2014 14:34
Avatar
Odpovídá na MartinMa
Michal Štěpánek:11.5.2014 14:36

Můžu vědět k čemu by se to mělo hodit?

Nahoru Odpovědět
11.5.2014 14:36
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
MartinMa
Člen
Avatar
MartinMa:11.5.2014 14:38

No proste jako tady na obrazku po pod kazdym button bych chtel mit jinej formular a jinou aplikaci

Editováno 11.5.2014 14:38
 
Nahoru Odpovědět
11.5.2014 14:38
Avatar
MartinMa
Člen
Avatar
 
Nahoru Odpovědět
11.5.2014 14:40
Avatar
Nahoru Odpovědět
11.5.2014 14:52
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
MartinMa
Člen
Avatar
MartinMa:11.5.2014 14:58

Hm jsem v praci a mame asi blokly uploadovani cehokoli. Chtel bych abych si proste v levym sloupci tlacitkama ovladal pravej sloupec kterej by byl ve stejnym okne ale menilo by se v nem cokoli chci jako kdyby to bylo novy okno , ten obrazek poslu z domova vecer. :( Nasel jsem ze by to pry slo pres nejaky user control, ale nikde jsem k tomu nenasel poradnej navod.

 
Nahoru Odpovědět
11.5.2014 14:58
Avatar
MartinMa
Člen
Avatar
MartinMa:11.5.2014 23:22

Prosim tě tak jsem zkoušel hledat a potřeboval bych přesně to co je v tom videu, ale kdyř píšu do toho code behind to

btn.Children.add (object); . Tak mi VS napise ze zadny Children neexistuje nevis proc? Presne tohle bych potreboval

https://www.youtube.com/watch?…

je to zhruba v 8:50 .

 
Nahoru Odpovědět
11.5.2014 23:22
Avatar
MartinMa
Člen
Avatar
Odpovídá na Michal Štěpánek
MartinMa:12.5.2014 7:49

Prosim tě tak jsem zkoušel hledat a potřeboval bych přesně to co je v tom videu, ale kdyř píšu do toho code behind to

btn.Children.add (object); . Tak mi VS napise ze zadny Children neexistuje nevis proc? Presne tohle bych potreboval

https://www.youtube.com/watch?…

je to zhruba v 8:50 .

 
Nahoru Odpovědět
12.5.2014 7:49
Avatar
Paradise
Tvůrce
Avatar
Odpovídá na MartinMa
Paradise:12.5.2014 9:07

Children označuje všechny prvky/elementy, které jsou mezi tagy <StackPanel> a </StackPanel> případně Gridu. Třeba tlačítka (Button) toto nepodporují. Možná si dříve pořádně procvič XAML a pozicování, pak ti tohle půjde bezproblémově :)

V tom videu právě Children nastavuje StackPanelu, má ho pojmenovaný stkTest.

 
Nahoru Odpovědět
12.5.2014 9:07
Avatar
MartinMa
Člen
Avatar
MartinMa:12.5.2014 9:52

Aha tak jsem se v tom asi nejak zamotal, nejak preskakuju podle toho co bych zrovna chtel udelat a urcte mi chybi spoustu souvyslosti nemam nato tolik času.Díky večer to zkusím :)

 
Nahoru Odpovědět
12.5.2014 9:52
Avatar
Paradise
Tvůrce
Avatar
Paradise:12.5.2014 9:58

Nikde jsem tu článek Gridech a StackPanelu nenašel, tak se pokusím napsat krátké shrnutí.

Grid ti dává více svobody, pro rozumné použití je třeba definovat sloupce (Column) a řádky (Row).

<Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>

        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="Auto" />
        </Grid.ColumnDefinitions>
</Grid>

Tlačítko pak na určitou pozici dás takto:

<Button Grid.Row="1" Grid.Column="1" />

(počítá se od 0)

Používej relativní rozměry pomocí Auto a *. Auto znamená, že řádek či sloupec bude tak veliký, aby se do něj vešel obsah, ale ne víc. * značí, aby sežral všechno dostupné místo.

Stackpanel prostě prvky skládá pod sebe, tak jak jsou v něm seřazené v XAML kódu. Můžeš je skládat ještě vodorovně, na to má StackPanel vlastnost Orientation.

 
Nahoru Odpovědět
12.5.2014 9:58
Avatar
MartinMa
Člen
Avatar
Odpovídá na Paradise
MartinMa:12.5.2014 11:24

Díky za odpověd tomuhle rozumim , jde mi pravě o to jak udělat, aby se mi nějáky formulař třeba ten UserControl " propojil" s main window přesně jako to dělá ten kluk v tom videu.

Nevim jak to napsat jednoduše. 2 sloupce v levym tlačitko na ktery když kliknu tak se mi v pravym sloupci zobrazi obsah formulaře user control nebo nejakeho jineho ktery budu mit vytvoreny.Myslim ze to uz pujde s tim children poplet jsem tam asi jmeno ze jsem dal jmeno button a ne stack panelu, uz se tesim domu abych to moh zskusit :)

 
Nahoru Odpovědět
12.5.2014 11:24
Avatar
Martin Gabriel
Tvůrce
Avatar
Martin Gabriel:12.5.2014 11:43

Pokud jsem Tě pochopil, tak si prostě udělej Grid, do kterého si naskládej co chceš (labely, textboxy, atd - prostě to co chceš po kliku zobrazovat), umístni si ho do hlavního okna tam, kde se má následně zobrazit a nastav mu Visibility.Co­llapsed. Až ho budeš chtít zobrazit (tzn v eventu tlačítka) mu nastav Visibility.Visible a je to.
Chtělo by si to projít pár tutoriálů a podle nich udělat pár programů, protože jsi evidentně zmatený.. :)

Nahoru Odpovědět
12.5.2014 11:43
"Be the change you want to see in the world" - Michael Scofield
Avatar
MartinMa
Člen
Avatar
Odpovídá na Martin Gabriel
MartinMa:12.5.2014 12:08

Ahoj no to asi presne potrebuju, podle me jsem uz prosel tutorialu tolik ze jsem z toho zmateny :D . a poradil by jsi mi nejakej ve kterym je primo priklad jak xaml tak i codebehind s tou visibilitou?

 
Nahoru Odpovědět
12.5.2014 12:08
Avatar
Martin Gabriel
Tvůrce
Avatar
Martin Gabriel:12.5.2014 12:36

XAML (ty Marginy jsou vygenerovené tím, že jsem si to ručně napozicoval v designeru)

<Button Name="myButton" Content="Show" Margin="158,10,182,280" Click="myButton_Click"></Button>
<Grid Name="myGrid" Margin="0,44,0,0" Visibility="Collapsed">
    <Label Name="myLabel" Content="Text test text test text" Margin="0,0,0,244"></Label>
    <TextBox Name="myTextBox" Margin="0,31,0,217"></TextBox>
    <Button Name="mySaveButton" Content="Save" Margin="0,63,268,185">           </Button>
</Grid>

Code:

private void myButton_Click(object sender, RoutedEventArgs e)
{
    if (myGrid.Visibility != Visibility.Visible)
        myGrid.Visibility = Visibility.Visible;
    else
        myGrid.Visibility = Visibility.Collapsed;
}

EDIT:
http://www.wpftutorial.net/
Tady je spousta užitečných věcí o WPF. Stačí hledat, najdeš toho na netu mraky.. ;)

Editováno 12.5.2014 12:39
Nahoru Odpovědět
12.5.2014 12:36
"Be the change you want to see in the world" - Michael Scofield
Avatar
MartinMa
Člen
Avatar
Odpovídá na Martin Gabriel
MartinMa:12.5.2014 12:44

Super diky MOC večer na to kouknu

 
Nahoru Odpovědět
12.5.2014 12:44
Avatar
Martin Gabriel
Tvůrce
Avatar
Odpovídá na MartinMa
Martin Gabriel:12.5.2014 12:56

Není zač - ber to jen jako příklad pro tu Visibilitu. Absolutní pozicování posléze moc nepoužívej (když zmenší okno, tak to zakryje obsah Tvého gridu), ale tak to už je povídání k nějakému dalšímu tutorialu. :)

Nastavovat Visibilitu se posléze dá spoustě objektů (tlačítka, labely, textboxy, nebo třeba celé gridy, stackpanel, atp). Pak je ještě supr vlastnost IsEnabled - například u tlačítka se s tím dá krásně hrát, když chceš, aby uživatel neměl možnost na něj klikat, ale aby ho viděl. Použít se to dá třeba u potvrzování licence - pokud si uživatel nesjede scrollem nakonec, tak je necháš defaultně:

acceptButton.IsEnabled = false

A na konci scrollování zase nastavíš true a je to. :)
(to už jsem ale asi trochu off-topic :D)

Nahoru Odpovědět
12.5.2014 12:56
"Be the change you want to see in the world" - Michael Scofield
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 25 zpráv z 25.