У меня есть usercontrol, что, когда я дважды нажимаю на него, я хочу, чтобы он увеличивался, если его еще нет. Если это так, то двойной щелчок уменьшит его. Я могу заставить его работать с кодом позади, но я не могу заставить его работать в xaml. Вот код за этим двойным щелчком мыши.Trigger Animations
void MyObjectMouseDoubleClick(object sender, MouseButtonEventArgs e)
{
if (IsZoomedIn)
{
IsZoomedIn = false;
//ZoomOutAnimation();
}
else
{
IsZoomedIn = true;
//ZoomInAnimation();
}
}
то в моем XAML:
<UserControl.RenderTransform>
<TransformGroup>
<RotateTransform />
<ScaleTransform />
<TranslateTransform />
</TransformGroup>
</UserControl.RenderTransform>
<UserControl.Style>
<Style>
<Style.Triggers>
<Trigger Property="local:MyObject.IsZoomedIn" Value="False">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="(UserControl.
RenderTransform).(TransformGroup.Children)[1].
(ScaleTransform.ScaleX)" To="1" Duration="0:0:.3" />
<DoubleAnimation Storyboard.TargetProperty="(UserControl.
RenderTransform).(TransformGroup.Children)[1].
(ScaleTransform.ScaleY)" To="1" Duration="0:0:.3" />
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
</Trigger>
<Trigger Property="local:MyObject.IsZoomedIn" Value="True">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="(UserControl.
RenderTransform).(TransformGroup.Children)[1].
(ScaleTransform.ScaleX)" To="2" Duration="0:0:.3" />
<DoubleAnimation Storyboard.TargetProperty="(UserControl.
RenderTransform).(TransformGroup.Children)[1].
(ScaleTransform.ScaleY)" To="2" Duration="0:0:.3" />
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
</Trigger>
</Style.Triggers>
</Style>
</UserControl.Style>
После того, как он наезжает на моем UserControl, зум из анимации не работает. Любая помощь оценивается.
Спасибо.
Спасибо! Но я все еще не совсем понимаю, почему ваш код работает. Я знаю, что это может быть не так «правильно», чтобы думать об этом таким образом, но это потому, что EnterActions больше похож на «if true», а ExitActions больше похож на «else»?
Спасибо. – jkidv
EnterActions и ExitActions более сродни инициализации и уничтожению, если/else. Кажется, что это происходит из-за порядка триггеров, по какой-то причине они не могут «передать» друг другу, а раскадровки будут вынуждать их значения в пользовательском интерфейсе, поскольку у них есть один из более высоких приоритетов. Я не использую раскадровки достаточно часто, чтобы окончательно прокомментировать, почему он не работает, но перемещая его на один триггер или явно останавливая каждую раскадровку в действиях выхода, это исправляет. http://msdn.microsoft.com/en-us/library/ms743230.aspx – rmoore