У меня есть раскадровка для холста, и я хочу остановить ее, как только свойство ShowError изменится.
<UserControl.Resources>
<Storyboard x:Key = "LoaderAnimation" Name = "LoaderAnimation" >
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty = "(UIElement.RenderTransform).(RotateTransform.Angle)"
Storyboard.TargetName = "canvas"
RepeatBehavior = "Forever">
<EasingDoubleKeyFrame KeyTime = "0" Value = "0"/>
<EasingDoubleKeyFrame KeyTime = "0:0:3" Value = "360"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</UserControl.Resources>
<Viewbox x:Name = "LayoutRoot" HorizontalAlignment = "Center" VerticalAlignment = "Top" Grid.Row = "0" Height = "150" Width = "250">
<Canvas Height = "323" Width = "308" RenderTransformOrigin = "0.5,0.5" x:Name = "canvas">
<Canvas.RenderTransform>
<RotateTransform/>
</Canvas.RenderTransform>
<Ellipse Fill = "{Binding Foreground, ElementName=userControl}" Height = "71" Canvas.Left = "121" Canvas.Top = "21" Width = "69" Opacity = "0.3"/>
<Ellipse Fill = "{Binding Foreground, ElementName=userControl}" Height = "71" Width = "69" Canvas.Left = "194" Canvas.Top = "52" Opacity = "0.4"/>
<Ellipse Fill = "{Binding Foreground, ElementName=userControl}" Width = "69" Height = "71"
</Canvas>
</Viewbox>
<TextBlock Grid.Row = "1" TextWrapping = "Wrap" FontSize = "20" Margin = "0 20 0 0">
<TextBlock.Style>
<Style TargetType = "TextBlock">
<Style.Triggers>
<DataTrigger Binding = "{Binding ShowError}" Value = "false">
<Setter Property = "Text" Value = "{loc:Translate LogIn.TestSpsConnection}" />
<Setter Property = "Foreground" Value = "Black" />
</DataTrigger>
<DataTrigger Binding = "{Binding ShowError}" Value = "true">
<Setter Property = "Text" Value = "{loc:Translate LogIn.FailSpsConnection}" />
<Setter Property = "Foreground" Value = "Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</Grid>
Я пробовал каждую идею, но не могу получить доступ к раскадровке из стиля TextBlock. Есть ли способ остановить анимацию, когда ShowError становится истинным? спасибо за помощь
Попробуйте применить триггер стиля к вашему холсту, который останавливает раскадровку, когда ShowError становится истинным, вместо того, чтобы делать это из вашего TextBlock.
Пример:
<UserControl.Resources>
<Storyboard x:Key = "LoaderAnimation" Name = "LoaderAnimation" >
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty = "(UIElement.RenderTransform).(RotateTransform.Angle)"
RepeatBehavior = "Forever">
<EasingDoubleKeyFrame KeyTime = "0" Value = "0"/>
<EasingDoubleKeyFrame KeyTime = "0:0:3" Value = "360"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</UserControl.Resources>
...
<Canvas Height = "323" Width = "308" RenderTransformOrigin = "0.5,0.5" x:Name = "canvas">
...
<Canvas.Style>
<Style TargetType = "Canvas">
<Style.Triggers>
<EventTrigger RoutedEvent = "Loaded">
<EventTrigger.Actions>
<BeginStoryboard x:Name = "beginStoryboard" Storyboard = "{StaticResource LoaderAnimation}"/>
</EventTrigger.Actions>
</EventTrigger>
<DataTrigger Binding = "{Binding ShowError}" Value = "True">
<DataTrigger.EnterActions>
<StopStoryboard BeginStoryboardName = "beginStoryboard"/>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
</Canvas.Style>
</Canvas>
Кроме того, обратите внимание, что я удалил Storyboard.TargetName из вашего ресурса, иначе он нарушает некоторые правила XAML при использовании так, как я это сделал. Вы получите ошибки времени выполнения, если сохраните его там.