WPF - XAML (podmínky pro spuštění animace)

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod LadyWinnie 24. 11. 2017 07:21

Zdravím,

Jsem nováček ve WPF a hlavně XAMLu... Snažím se o jednoduchou animaci něco jako vysunutí a zasunutí panelu (Menu) na kliknutí tlačítka. Mám tedy Grid (panel menu) a tlačítko. Do Application.Resources, kam píšu všechny styly, jsem napsala 2 StoryBoardy s animací měnící Height z 200 na 40 a druhou animací, která provádí přesný opak.

Kód: Vybrat vše
<Storyboard x:Key="ClosePanelNastaveni">
            <DoubleAnimation Storyboard.TargetName="PanelNastaveni"
                             Storyboard.TargetProperty="Height"
                             From="200" To="40" Duration="0:0:1"/>
        </Storyboard>

        <Storyboard x:Key="OpenPanelNastaveni">
            <DoubleAnimation Storyboard.TargetName="PanelNastaveni"
                             Storyboard.TargetProperty="Height"
                             From="40" To="200" Duration="0:0:1"/>
        </Storyboard>


První otázkou tedy je.. Lze zapsat nějakými proměnnými hodnoty výšky panelu podle kterých by se animace řídila zda je panel "zavřený" či "otevřený"?

Dále jsem zapsala trigger na tlačítko:

Kód: Vybrat vše
<Button.Triggers>
                    <EventTrigger x:Name="CloseSetting" RoutedEvent="Button.Click" SourceName="btnNastavení">
                        <BeginStoryboard x:Name="CloseGrid" Storyboard="{StaticResource ClosePanelNastaveni}"/>
                    </EventTrigger>

                    <!--<EventTrigger x:Name="OpenSetting" RoutedEvent="Button.Click" SourceName="btnNastavení">
                        <BeginStoryboard x:Name="OpenGrid" Storyboard="{StaticResource OpenPanelNastaveni}"/>
                    </EventTrigger>-->
                </Button.Triggers>


obsahuje dva EventTriggery (jeden zakomentovaný) a obdobná otázka.. Lze to nějak spojit s tím, že by se vložila ještě jedna podmínka zda je teda ten panel "otevřený" či "zavřený"? :D Jak je vidět dosáhla jsem pouze toho, že mužu spouštět pořád jen jednu a tu samou animaci a nedokážu je měnit na základě vyčtených dat výšky gridu..
uvítám jakoukoliv pomoc i radu jak by se dal problém vyřešit jiným lepším způsobem. Snažím se vyhnout tomu abych psala nějaký kód na pozadí v C# a naučila se ovládat animace a design programu v xamlu. Kdyby byl někdo ochoten mě toho naučit víc budu moc ráda.. prokousávám se tím bohužel úplně sama. :(
LadyWinnie
Kolemjdoucí
Uživatelský avatar

Odeslat příspěvekod Nargon 24. 11. 2017 09:56

Animace v XAML jsem nikdy nedělal, ale je logické že na "zmáčknutí" tlačítka můžeš navěsit jen jednu funkci. Jak by totiž mělo tlačítko vědět že má spustit rozbalení nebo sbalení menu.
Ale řešením by mohlo být když v té animaci kromě rozbalení menu ještě nastavíš tlačítku tu druhou funkci na sbalení menu. A samozřejmě i opačně. Pak dalším klikem se spustí ta druhá funkce.
Ovšem neporadím ti jak na to, to nevím.
Desktop: Ryzen 7 1800X (3.95GHz, 1.35V), Asus Crosshair VI Hero, 16GB DDR4 Ram (3200MHz), 128GB SSD + 3TB HDD, Nvidia GTX 1080
Notebook: Asus UL50VT 15.6" (SU7300@1.7GHz, 4GB ram, 500GB HDD, Intel GMA 4500MHD + nVidia G210M, dlouha vydrz cca 7+ hod)
Nargon
Moderátor

Odeslat příspěvekod LadyWinnie 24. 11. 2017 10:20

Jedná se mi o to vložit ještě jednu podmínku, která by určovala zda spustí animaci na zavření nebo na otevření menu.. dvěma tlačítky je z uživatelského hlediska nesmysl když je tlačítko rozloženo jako horní lišta s názvem Nastavení a po kliku rozbalí svůj obsah. Jedině mě napadá mít tam opravdu dvě úplně totožná tlačítka a v C# určit při kliku visible obou tlačítek (Otevřeno -je vidět jedno tlačítko, Zavřeno - je vidět druhé tlačítko na stejném místě s totožným návrhem) a každému přiřadit určenou animaci. To mi přijde ale docela ujeté řešení přestože by uživatel nic zřejmě nepoznal.. Ale zatím asi zkusím.. :hm
LadyWinnie
Kolemjdoucí
Uživatelský avatar

Odeslat příspěvekod Nargon 24. 11. 2017 11:39

Dvě tlačítka jsou asi celkem prasárna. To jsem psal jsem měl na mysli tak, že animace "openMenu" kromě rozevření menu také zapíše do tlačítka, aby animace po kliknutí byla closeMenu. Tím pádem když na to znovu klikneš tak se spustí ta druhá animace, která to zase přepíše zpět.

A nebo mě teď napadlo nepoužívat tlačítko, ale zkus tam dát checkbox. Tam možná půjde nastavit dvě animace. Jedna se spustí při zaškrtnutí a druhá při odškrtnutí. Jen tedy ten checkbox budeš muset nějak nastylovat, aby to vypadalo jako to tlačítko co tam chceš mít.
Desktop: Ryzen 7 1800X (3.95GHz, 1.35V), Asus Crosshair VI Hero, 16GB DDR4 Ram (3200MHz), 128GB SSD + 3TB HDD, Nvidia GTX 1080
Notebook: Asus UL50VT 15.6" (SU7300@1.7GHz, 4GB ram, 500GB HDD, Intel GMA 4500MHD + nVidia G210M, dlouha vydrz cca 7+ hod)
Nargon
Moderátor

Odeslat příspěvekod Just_jo 24. 11. 2017 20:09

Tady není nějaká volitelná property ( např. tag ) pro podmínku?
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod LadyWinnie 28. 11. 2017 06:07

Jako se 2 tlačítky to funguje krásně a vubec neni poznat že tam jsou dvě tlačítka :D :D ale ráda bych teda aby tam bylo jen jedno a vyřešit to tou podmínkou podle nějaké další property... to jako jo.. ale já spíš nevím ten kod.. v xamlu se teprve učím takže teoretický postup mi moc nepomůže ten už mám vpodstatě vymyšlený :D no každopádně zatím to mám na prasáka ale pozná se to jen v kodu takže tak špatné to není :D :D
LadyWinnie
Kolemjdoucí
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků