Je souhaite appliquer un petit storyboard à une collection d'étiquettes dans ma fenêtre. Mon story-board est comme ça:Storyboard s'applique à toutes les étiquettes
<Storyboard x:Key="Storyboard1" AutoReverse="True" RepeatBehavior="Forever">
<ColorAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="label" Storyboard.TargetProperty="(Label.Foreground).(SolidColorBrush.Color)">
<SplineColorKeyFrame KeyTime="00:00:00.1000000" Value="#FFFFFF"/>
</ColorAnimationUsingKeyFrames>
</Storyboard>
J'ai une fenêtre composée de ce qui suit:
<Grid Background="#FF000000">
<Viewbox HorizontalAlignment="Center" VerticalAlignment="Center" Stretch="Uniform">
<UniformGrid x:Name="grid" Background="#FF000000" />
</Viewbox>
</Grid>
Quand je veux commencer mon story-board je fais ça:
Storyboard.SetTarget(_stb, myLabel);
_stb.Begin();
où _std est mon storyboard chargé par les ressources de la fenêtre.
L'animation fonctionne bien, mais sur toutes les étiquettes (pas seulement celle que je veux). J'ai essayé de changer SetTarget par SetTargetName mais les étiquettes sont créées dans ma fenêtre par le constructeur et les noms ne peuvent pas être fondés quand j'essaye "SetTargetName".
Avez-vous des idées?
Merci de
------------ EDIT: Nous m'a demandé d'être plus descriptif ------------------ --------------------------------------------------
étiquette ne sont pas créés directement dans le XAML, ils sont créés par le constructeur de la fenêtre:
public SpellerWindow(IKeyboard keyboard, int colomnNumber, SolidColorBrush background, SolidColorBrush foreground)
{
InitializeComponent();
grid.Columns = colomnNumber;
int i = 0;
foreach(IKey key in keyboard.Zones.Default.Keys)
{
Label lb = new Label();
lb.Foreground = foreground;
lb.Name = "label"+(i++).ToString();
lb.Content = key.ActualKeys[keyboard.CurrentMode].UpLabel;
lb.HorizontalAlignment = HorizontalAlignment.Center;
lb.VerticalAlignment = VerticalAlignment.Center;
Viewbox box = new Viewbox();
box.Stretch = Stretch.Fill;
box.Child = lb;
box.Tag = key;
grid.Children.Add(box);
}
}
Animations démarrés par un gestionnaire d'événements:
void Highlighter_StartAnimation(object sender, HiEventArgs e)
{
Storyboard stb;
if(!_anims.TryGetValue(e.Step.Animation.Name, out stb))
{
stb = (Storyboard)_window.FindResource(e.Step.Animation.Name);
_anims.Add(e.Step.Animation.Name, stb);
}
DoAnimations(_zones[e.Step.Zone], stb);
}
Enfin, des animations sont mises en marche par DoAnimations:
void DoAnimations(List<Label> labels, Storyboard stb)
{
foreach(Label lb in labels)
{
Storyboard.SetTarget(stb, lb);
stb.Begin();
}
}
Je veux mettre en évidence une collection d'étiquettes, mais toutes les étiquettes clignotent. Je ne sais pas pourquoi, mais j'essaie de créer directement une étiquette dans le Xaml, et de définir un Storyboard.TargetName (lié au nom de l'étiquette) dans le Xaml du storyboard. Et ça marche ...
Maintenant vous savez tout.
Merci pour votre aide :)
Je suppose que "myLabel" est dans le UniformGrid. Votre code fonctionne pour moi lorsque j'ajoute deux étiquettes à la grille uniforme dans XAML. Pouvez-vous nous en dire plus sur la façon dont tout est mis en place? –
La modification du titre d'une question ne la ferme pas. Si vous voulez vraiment que la question soit fermée, signalez-la à un modérateur et laissez une note. – Aaronaught
Ok Aaronaught, je viens de le faire. –