Я хочу применить небольшую раскадровку к коллекции ярлыков в моем окне.
Моя раскадровка такая:
<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>
У меня есть окно, состоящее из этого:
<Grid Background="#FF000000">
<Viewbox HorizontalAlignment="Center" VerticalAlignment="Center" Stretch="Uniform">
<UniformGrid x:Name="grid" Background="#FF000000" />
</Viewbox>
</Grid>
Когда я хочу запустить раскадровку, я делаю это:
Storyboard.SetTarget( _stb, myLabel );
_stb.Begin();
где _std - моя раскадровка, загруженная ресурсами окна.
Анимация работает отлично, но на всех ярлыках (не только на том, который я хочу).
Я пытался переключить SetTarget с помощью SetTargetName, но метки создаются в моем окне конструктором, и имена не могут быть найдены при попытке "SetTargetName".
У вас есть идеи?
Спасибо:)
------------ Редактировать: Мы попросили меня быть более информативным -------------------------- ------------------------------------------
Метка не создается непосредственно в xaml, она создается конструктором окна:
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 );
}
}
Анимации запускаются обработчиком событий:
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 );
}
Наконец, анимация запускается DoAnimations:
void DoAnimations( List<Label> labels, Storyboard stb )
{
foreach( Label lb in labels )
{
Storyboard.SetTarget( stb, lb );
stb.Begin();
}
}
Я хочу выделить коллекцию ярлыков, но все ярлыки мигают.
Я не знаю почему, но я пытаюсь создать ярлык непосредственно в Xaml и установить Storyboard.TargetName (привязанный к имени ярлыка) в Xaml раскадровки. И это работает ...
Теперь ты все знаешь.
Спасибо за помощь:)