Stránky

pondělí 30. srpna 2010

Použití jednoho Storyboardu na více prvků najednou.


Pro názornou ukázku si na layout dám např. 5x TextBlock a vytvořím si jednoduchý Storyboard na prvním TextBlocku, který mi bude měnit barvu pozadí. Nyní se dostávám do situace, kdy ten Storyboard je jen pro ten jeden TextBlock. Já potřebuji, abych si v kódu zvolil, že se animace má provést na TextBlocku1, TextBlocku4 a TextBlocku5. Řešení je vcelku jednoduché. V Xaml kódu musíme odstranit Storyboard.TargetName="TB1" a tím máme Storyboard, který není přiřazen žádnému targetu. Pozor, pokud odstraníte TargetName, tak v Blendu již nelze upravovat samotný storyboard, jelikož hází chybu. Pokud jsou potřeba nějaké pozdější úpravy, tak si tam vždycky ten target musíte dopsat, vyzkoušet a pak zase vymazat.
Pro názorné předvedení si vložím na layout tlačítko a ve zdrojovém kódu udělám obsluhu události Click. Abych mohl přistupovat ke storyboardům, tak musím přidat

using System.Windows.Media.Animation;

V obsluze tlačítka si tedy najdu ten storyboard a ten aplikuju na mnou zvolené TextBlocky.

Storyboard animace = (Storyboard)FindResource("StoryboardAnimaceBackground");
animace.SetValue(Storyboard.TargetNameProperty, TB1.Name);
animace.Begin();
animace.SetValue(Storyboard.TargetNameProperty, TB4.Name);
animace.Begin();
animace.SetValue(Storyboard.TargetNameProperty, TB5.Name);
animace.Begin();


Tím je vyřešený celý problém. Udělám ještě drobnou úpravu v Xaml kódu, jelikož nechci aby mi animace vždy zůstala zastavená na konci, ale aby se ukončila. Do storyboardu v Xamlu přidám FillBehavior="Stop" a je to.


Přeji mnoho zdaru.

Žádné komentáře:

Okomentovat