Я хочу применить небольшую раскадровку к коллекции меток в моем окне. Моя раскадровка так:Раскадровка применяется ко всем этикеткам
<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».
Есть ли у вас идеи?
спасибо :)
------------ Edit: Мы попросили меня быть более описательный ------------------ --------------------------------------------------
этикетки не создаются непосредственно в 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);
}
}
Animations запускаются с помощью обработчика событий:
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 и установить в Xaml раскадровки имя Storyboard.TargetName (связанное с именем метки). И это работает ...
Теперь вы все знаете.
Спасибо Вам помочь :)
Я предполагаю, что «myLabel» находится в UniformGrid. Ваш код работает для меня, когда я добавляю две метки в форму единой сетки в XAML. Можете ли вы рассказать нам больше о том, как все настроено? –
Редактирование заголовка вопроса не закрывает его. Если вы действительно хотите, чтобы вопрос был закрыт, отметьте его модератором и оставьте примечание. – Aaronaught
Хорошо, Аарон, я просто сделал это. –