public RepeatBehaviorExample() { // Create a name scope for the page. NameScope.SetNameScope(this, new NameScope()); this.WindowTitle = "RepeatBehavior Example"; Border myBorder = new Border(); myBorder.HorizontalAlignment = HorizontalAlignment.Stretch; this.Content = myBorder; StackPanel myStackPanel = new StackPanel(); myStackPanel.Margin = new Thickness(20); myBorder.Child = myStackPanel; Border myBorder1 = new Border(); SolidColorBrush mySolidColorBrush = new SolidColorBrush(Color.FromArgb(153, 255, 255, 255)); myBorder1.Background = mySolidColorBrush; myStackPanel.Children.Add(myBorder1); TextBlock myTextBlock = new TextBlock(); myTextBlock.Margin = new Thickness(20); myTextBlock.Text = "This example shows how the RepeatBehavior property "; myTextBlock.Text += "is used to make a timeline repeat. Several rectangles are animated by "; myTextBlock.Text += "DoubleAnimations with identical durations and target values, but with different "; myTextBlock.Text += "RepeatBehavior settings."; myBorder1.Child = myTextBlock; myTextBlock = new TextBlock(); myTextBlock.Text = "\nRepeatBehavior=\"Forever\" "; myStackPanel.Children.Add(myTextBlock); Rectangle foreverRepeatingRectangle = new Rectangle(); foreverRepeatingRectangle.Name = "foreverRepeatingRectangle"; this.RegisterName(foreverRepeatingRectangle.Name, foreverRepeatingRectangle); mySolidColorBrush = new SolidColorBrush(Color.FromArgb(170, 51, 51, 255)); foreverRepeatingRectangle.Fill = mySolidColorBrush; foreverRepeatingRectangle.Width = 50; foreverRepeatingRectangle.Height = 20; foreverRepeatingRectangle.HorizontalAlignment = HorizontalAlignment.Left; myStackPanel.Children.Add(foreverRepeatingRectangle); myTextBlock = new TextBlock(); myTextBlock.Text = "\nRepeatBehavior=\"0:0:4\" "; myStackPanel.Children.Add(myTextBlock); Rectangle fourSecondsRepeatingRectangle = new Rectangle(); fourSecondsRepeatingRectangle.Name = "fourSecondsRepeatingRectangle"; this.RegisterName(fourSecondsRepeatingRectangle.Name, fourSecondsRepeatingRectangle); fourSecondsRepeatingRectangle.Fill = mySolidColorBrush; fourSecondsRepeatingRectangle.Width = 50; fourSecondsRepeatingRectangle.Height = 20; fourSecondsRepeatingRectangle.HorizontalAlignment = HorizontalAlignment.Left; myStackPanel.Children.Add(fourSecondsRepeatingRectangle); myTextBlock = new TextBlock(); myTextBlock.Text = "\nRepeatBehavior=\"2x\" "; myStackPanel.Children.Add(myTextBlock); Rectangle twiceRepeatingRectangle = new Rectangle(); twiceRepeatingRectangle.Name = "twiceRepeatingRectangle"; this.RegisterName(twiceRepeatingRectangle.Name, twiceRepeatingRectangle); twiceRepeatingRectangle.Fill = mySolidColorBrush; twiceRepeatingRectangle.Width = 50; twiceRepeatingRectangle.Height = 20; twiceRepeatingRectangle.HorizontalAlignment = HorizontalAlignment.Left; myStackPanel.Children.Add(twiceRepeatingRectangle); myTextBlock = new TextBlock(); myTextBlock.Text = "\nRepeatBehavior=\"0.05\" "; myStackPanel.Children.Add(myTextBlock); Rectangle halfRepeatingRectangle = new Rectangle(); halfRepeatingRectangle.Name = "halfRepeatingRectangle"; this.RegisterName(halfRepeatingRectangle.Name, halfRepeatingRectangle); halfRepeatingRectangle.Fill = mySolidColorBrush; halfRepeatingRectangle.Width = 50; halfRepeatingRectangle.Height = 20; halfRepeatingRectangle.HorizontalAlignment = HorizontalAlignment.Left; myStackPanel.Children.Add(halfRepeatingRectangle); myTextBlock = new TextBlock(); myTextBlock.Text = "\nRepeatBehavior=\"0:0:1\" "; myStackPanel.Children.Add(myTextBlock); Rectangle oneSecondRepeatingRectangle = new Rectangle(); oneSecondRepeatingRectangle.Name = "oneSecondRepeatingRectangle"; this.RegisterName(oneSecondRepeatingRectangle.Name, oneSecondRepeatingRectangle); oneSecondRepeatingRectangle.Fill = mySolidColorBrush; oneSecondRepeatingRectangle.Width = 50; oneSecondRepeatingRectangle.Height = 20; oneSecondRepeatingRectangle.HorizontalAlignment = HorizontalAlignment.Left; myStackPanel.Children.Add(oneSecondRepeatingRectangle); StackPanel myStackPanel1 = new StackPanel(); myStackPanel.Children.Add(myStackPanel1); myStackPanel1.Orientation = Orientation.Horizontal; myStackPanel1.Margin = new Thickness(0, 20, 0, 0); // // Create an animation that repeats indefinitely. // DoubleAnimation myForeverRepeatingDoubleAnimation = new DoubleAnimation(); Storyboard.SetTargetName(myForeverRepeatingDoubleAnimation, foreverRepeatingRectangle.Name); Storyboard.SetTargetProperty(myForeverRepeatingDoubleAnimation, new PropertyPath(Rectangle.WidthProperty)); myForeverRepeatingDoubleAnimation.From = 50; myForeverRepeatingDoubleAnimation.To = 300; myForeverRepeatingDoubleAnimation.Duration = new Duration(TimeSpan.FromMilliseconds(2000)); myForeverRepeatingDoubleAnimation.RepeatBehavior = RepeatBehavior.Forever; // // Create an animation that repeats for four seconds. // As a result,the animation repeats twice. DoubleAnimation myFourSecondsRepeatingDoubleAnimation = new DoubleAnimation(); Storyboard.SetTargetName(myFourSecondsRepeatingDoubleAnimation, fourSecondsRepeatingRectangle.Name); Storyboard.SetTargetProperty(myFourSecondsRepeatingDoubleAnimation, new PropertyPath(Rectangle.WidthProperty)); myFourSecondsRepeatingDoubleAnimation.From = 50; myFourSecondsRepeatingDoubleAnimation.To = 300; myFourSecondsRepeatingDoubleAnimation.Duration = new Duration(TimeSpan.FromMilliseconds(2000)); myFourSecondsRepeatingDoubleAnimation.RepeatBehavior = new RepeatBehavior(TimeSpan.FromMilliseconds(4000)); // // Create an animation that repeats twice. // DoubleAnimation myTwiceRepeatingDoubleAnimation = new DoubleAnimation(); Storyboard.SetTargetName(myTwiceRepeatingDoubleAnimation, twiceRepeatingRectangle.Name); Storyboard.SetTargetProperty(myTwiceRepeatingDoubleAnimation, new PropertyPath(Rectangle.WidthProperty)); myTwiceRepeatingDoubleAnimation.From = 50; myTwiceRepeatingDoubleAnimation.To = 300; myTwiceRepeatingDoubleAnimation.Duration = new Duration(TimeSpan.FromMilliseconds(2000)); myTwiceRepeatingDoubleAnimation.RepeatBehavior = new RepeatBehavior(2); // // Create an animation that repeats 0.5 times. The resulting animation plays for one second, // half of its Duration. It animates from 50 to 150. DoubleAnimation myHalfRepeatingDoubleAnimation = new DoubleAnimation(); Storyboard.SetTargetName(myHalfRepeatingDoubleAnimation, halfRepeatingRectangle.Name); Storyboard.SetTargetProperty(myHalfRepeatingDoubleAnimation, new PropertyPath(Rectangle.WidthProperty)); myHalfRepeatingDoubleAnimation.From = 50; myHalfRepeatingDoubleAnimation.To = 300; myHalfRepeatingDoubleAnimation.Duration = new Duration(TimeSpan.FromMilliseconds(2000)); myHalfRepeatingDoubleAnimation.RepeatBehavior = new RepeatBehavior(0.5); // // Create an animation that repeats for one second. The resulting animation // plays for one second, half of its Duration. It animates from 50 to 150. DoubleAnimation myOneSecondDoubleAnimation = new DoubleAnimation(); Storyboard.SetTargetName(myOneSecondDoubleAnimation, oneSecondRepeatingRectangle.Name); Storyboard.SetTargetProperty(myOneSecondDoubleAnimation, new PropertyPath(Rectangle.WidthProperty)); myOneSecondDoubleAnimation.From = 50; myOneSecondDoubleAnimation.To = 300; myOneSecondDoubleAnimation.Duration = new Duration(TimeSpan.FromMilliseconds(2000)); myOneSecondDoubleAnimation.RepeatBehavior = new RepeatBehavior(TimeSpan.FromMilliseconds(1000)); // // Create a Storyboard to contain the animations and add the animations to the Storyboard // Storyboard myStoryboard = new Storyboard(); myStoryboard.Children.Add(myForeverRepeatingDoubleAnimation); myStoryboard.Children.Add(myFourSecondsRepeatingDoubleAnimation); myStoryboard.Children.Add(myTwiceRepeatingDoubleAnimation); myStoryboard.Children.Add(myHalfRepeatingDoubleAnimation); myStoryboard.Children.Add(myOneSecondDoubleAnimation); // // Create buttons to restart and stop the animations. // Button myRestartButton = new Button(); myRestartButton.Name = "restartButton"; this.RegisterName(myRestartButton.Name, myRestartButton); myRestartButton.Content = "Start Animations"; myStackPanel1.Children.Add(myRestartButton); Button myStopButton = new Button(); myStopButton.Name = "stopButton"; this.RegisterName(myStopButton.Name, myStopButton); myStopButton.Content = "Stop"; mySolidColorBrush = new SolidColorBrush(Color.FromArgb(102, 153, 0, 255)); myStopButton.Background = mySolidColorBrush; myStackPanel1.Children.Add(myStopButton); // // Create EventTriggers and the BeginStoryboard and StopStoryboard actions to start // and stop the storyboard. BeginStoryboard myBeginStoryboard = new BeginStoryboard(); myBeginStoryboard.Name = "myBeginStoryboard"; this.RegisterName(myBeginStoryboard.Name, myBeginStoryboard); myBeginStoryboard.Storyboard = myStoryboard; EventTrigger myEventTrigger = new EventTrigger(); myEventTrigger.RoutedEvent = Button.ClickEvent; myEventTrigger.SourceName = myRestartButton.Name; myEventTrigger.Actions.Add(myBeginStoryboard); myStackPanel.Triggers.Add(myEventTrigger); EventTrigger myEventTrigger1 = new EventTrigger(); myEventTrigger1.RoutedEvent = Button.ClickEvent; myEventTrigger1.SourceName = myStopButton.Name; StopStoryboard myStopStoryboard = new StopStoryboard(); myStopStoryboard.BeginStoryboardName = myBeginStoryboard.Name; myEventTrigger1.Actions.Add(myStopStoryboard); myStackPanel.Triggers.Add(myEventTrigger1); }
public override void OnApplyTemplate() { this.CombateGrid = this.GetTemplateChild("CombateGrid") as Grid; if (this.CombateGrid == null) { return; } foreach (BoardField field in Board.Layout) { var rect = new Rectangle { Stroke = Brushes.Black, }; var rectStyle = new Style(typeof(Rectangle)); var defaultFill = new Setter(Shape.FillProperty, Brushes.Transparent); var defaultStrokethickness = new Setter(Shape.StrokeThicknessProperty, 1.0); var defaultHitTest = new Setter(IsHitTestVisibleProperty, true); rectStyle.Setters.Add(defaultFill); rectStyle.Setters.Add(defaultStrokethickness); rectStyle.Setters.Add(defaultHitTest); var unwalkableFill = new Setter(Shape.FillProperty, Brushes.Blue); var unwalkableStrokeThickness = new Setter(Shape.StrokeThicknessProperty, 0.0); var unwalkableHitTest = new Setter(IsHitTestVisibleProperty, false); var unwalkableTrigger = new DataTrigger { Binding = new Binding("IsWalkable") { Source = field }, Value = false }; unwalkableTrigger.Setters.Add(unwalkableFill); unwalkableTrigger.Setters.Add(unwalkableStrokeThickness); unwalkableTrigger.Setters.Add(unwalkableHitTest); var attackableFill = new Setter { Property = Shape.FillProperty, Value = Brushes.Red }; var atackableTrigger = new DataTrigger { Binding = new Binding("IsAttackable") { Source = field }, Value = true }; atackableTrigger.Setters.Add(attackableFill); var enabledFill = new Setter { Property = Shape.FillProperty, Value = Brushes.SpringGreen }; var enabledTrigger = new DataTrigger { Binding = new Binding("IsEnabled") { Source = field }, Value = true }; enabledTrigger.Setters.Add(enabledFill); rectStyle.Triggers.Add(unwalkableTrigger); rectStyle.Triggers.Add(atackableTrigger); rectStyle.Triggers.Add(enabledTrigger); rect.Style = rectStyle; var clickDownEvent = new EventToCommand { Command = this.Vm.FieldClickDownCommand, CommandParameter = field }; var triggerEvent = new InteractiveEventTrigger { EventName = "MouseLeftButtonDown", }; triggerEvent.Actions.Add(clickDownEvent); TriggerCollection triggers = Interaction.GetTriggers(rect); triggers.Add(triggerEvent); Grid.SetColumn(rect, field.Column); Grid.SetRow(rect, field.Row); Panel.SetZIndex(rect, 1); this.CombateGrid.Children.Add(rect); } foreach (BoardPiece piece in SelfPlayer.Army) { var button = new Button { BorderThickness = new Thickness(3), BorderBrush = Brushes.Black, FontWeight = FontWeights.Bold, Command = this.Vm.PieceClickCommand, CommandParameter = piece }; var buttonStyle = new Style(typeof(Button)) { BasedOn = FindResource("MetroCircleButtonStyle") as Style }; var defaultBackground = new Setter(BackgroundProperty, Brushes.Gray); var defaultVisibility = new Setter(VisibilityProperty, Visibility.Collapsed); var defaultEffect = new Setter(EffectProperty, null); var defaultForeground = new Setter(ForegroundProperty, Brushes.Black); var defaultFontSize = new Setter(FontSizeProperty, 12.0); buttonStyle.Setters.Add(defaultBackground); buttonStyle.Setters.Add(defaultVisibility); buttonStyle.Setters.Add(defaultEffect); buttonStyle.Setters.Add(defaultForeground); buttonStyle.Setters.Add(defaultFontSize); var player1Setter = new Setter(BackgroundProperty, TryFindResource("Player1Brush")); var player2Setter = new Setter(BackgroundProperty, TryFindResource("Player2Brush")); var isOpponentCondition = new Condition { Binding = new Binding("IsOpponent") { Source = piece }, Value = true }; var isSelfPlayerCondition = new Condition { Binding = new Binding("IsOpponent") { Source = piece }, Value = false }; var opponentIsPlayer1 = new Condition { Binding = new Binding("IsPlayer2") { Source = this.Vm.Opponent }, Value = false }; var selfPlayerIsPlayer1 = new Condition { Binding = new Binding("IsPlayer2") { Source = this.Vm.SelfPlayer }, Value = false }; var opponentIsPlayer2 = new Condition { Binding = new Binding("IsPlayer2") { Source = this.Vm.Opponent }, Value = true }; var selfPlayerIsPlayer2 = new Condition { Binding = new Binding("IsPlayer2") { Source = this.Vm.SelfPlayer }, Value = true }; var player1Trigger1 = new MultiDataTrigger(); player1Trigger1.Conditions.Add(isOpponentCondition); player1Trigger1.Conditions.Add(opponentIsPlayer1); player1Trigger1.Setters.Add(player1Setter); var player1Trigger2 = new MultiDataTrigger(); player1Trigger2.Conditions.Add(isSelfPlayerCondition); player1Trigger2.Conditions.Add(selfPlayerIsPlayer1); player1Trigger2.Setters.Add(player1Setter); var player2Trigger1 = new MultiDataTrigger(); player2Trigger1.Conditions.Add(isOpponentCondition); player2Trigger1.Conditions.Add(opponentIsPlayer2); player2Trigger1.Setters.Add(player2Setter); var player2Trigger2 = new MultiDataTrigger(); player2Trigger2.Conditions.Add(isSelfPlayerCondition); player2Trigger2.Conditions.Add(selfPlayerIsPlayer2); player2Trigger2.Setters.Add(player2Setter); var visibilitySetter = new Setter(VisibilityProperty, Visibility.Visible); var visibilityTrigger = new DataTrigger { Binding = new Binding("IsAlive") { Source = piece }, Value = true }; visibilityTrigger.Setters.Add(visibilitySetter); var effectSetter = new Setter(EffectProperty, new DropShadowEffect()); var effectTrigger = new DataTrigger { Binding = new Binding("IsSelected") { Source = piece }, Value = true }; effectTrigger.Setters.Add(effectSetter); var onAttackFontSizeSetter = new Setter(FontSizeProperty, button.FontSize * 2.0); var winningForegroundSetter = new Setter(ForegroundProperty, Brushes.Green); var winningTrigger = new DataTrigger { Binding = new Binding("IsDefeating") { Source = piece }, Value = true }; winningTrigger.Setters.Add(onAttackFontSizeSetter); winningTrigger.Setters.Add(winningForegroundSetter); var defeatStoryboard = new Storyboard { AccelerationRatio = 0.2 }; defeatStoryboard.Completed += (s, _) => DefeatStoryboard_Completed(); var defeatAnimation = new DoubleAnimation(0.1, new TimeSpan(0, 0, 0, 2, 0)); Storyboard.SetTarget(defeatAnimation, button); Storyboard.SetTargetProperty(defeatAnimation, new PropertyPath(FontSizeProperty)); defeatStoryboard.Children.Add(defeatAnimation); var beginSb = new BeginStoryboard { Storyboard = defeatStoryboard, Name = "DefeatStoryboard" }; var stopSb = new StopStoryboard { BeginStoryboardName = beginSb.Name }; var losingForegroundSetter = new Setter(ForegroundProperty, Brushes.Red); var losingTrigger = new DataTrigger { Binding = new Binding("IsBeingDefeated") { Source = piece }, Value = true }; losingTrigger.EnterActions.Add(beginSb); losingTrigger.ExitActions.Add(stopSb); losingTrigger.Setters.Add(onAttackFontSizeSetter); losingTrigger.Setters.Add(losingForegroundSetter); buttonStyle.Triggers.Add(player1Trigger1); buttonStyle.Triggers.Add(player1Trigger2); buttonStyle.Triggers.Add(player2Trigger1); buttonStyle.Triggers.Add(player2Trigger2); buttonStyle.Triggers.Add(visibilityTrigger); buttonStyle.Triggers.Add(effectTrigger); buttonStyle.Triggers.Add(winningTrigger); buttonStyle.Triggers.Add(losingTrigger); buttonStyle.RegisterName(beginSb.Name, beginSb); button.Style = buttonStyle; ApplyBinding("Column", piece, button, Grid.ColumnProperty); ApplyBinding("Row", piece, button, Grid.RowProperty); ApplyBinding("PowerLevel", piece, button, ContentProperty); Panel.SetZIndex(button, 2); this.CombateGrid.Children.Add(button); } foreach (BoardPiece piece in Opponent.Army) { var button = new Button { Effect = null, BorderThickness = new Thickness(3), BorderBrush = Brushes.Black, FontWeight = FontWeights.Bold, IsHitTestVisible = false }; var buttonStyle = new Style(typeof(Button)) { BasedOn = FindResource("MetroCircleButtonStyle") as Style }; var defaultBackground = new Setter(BackgroundProperty, Brushes.Gray); var defaultVisibility = new Setter(VisibilityProperty, Visibility.Collapsed); var defaultForeground = new Setter(ForegroundProperty, Brushes.Black); var defaultFontSize = new Setter(FontSizeProperty, 12.0); buttonStyle.Setters.Add(defaultBackground); buttonStyle.Setters.Add(defaultVisibility); buttonStyle.Setters.Add(defaultForeground); buttonStyle.Setters.Add(defaultFontSize); var player1Setter = new Setter(BackgroundProperty, TryFindResource("Player1Brush")); var player2Setter = new Setter(BackgroundProperty, TryFindResource("Player2Brush")); var isOpponentCondition = new Condition { Binding = new Binding("IsOpponent") { Source = piece }, Value = true }; var isSelfPlayerCondition = new Condition { Binding = new Binding("IsOpponent") { Source = piece }, Value = false }; var opponentIsPlayer1 = new Condition { Binding = new Binding("IsPlayer2") { Source = this.Vm.Opponent }, Value = false }; var selfPlayerIsPlayer1 = new Condition { Binding = new Binding("IsPlayer2") { Source = this.Vm.SelfPlayer }, Value = false }; var opponentIsPlayer2 = new Condition { Binding = new Binding("IsPlayer2") { Source = this.Vm.Opponent }, Value = true }; var selfPlayerIsPlayer2 = new Condition { Binding = new Binding("IsPlayer2") { Source = this.Vm.SelfPlayer }, Value = true }; var player1Trigger1 = new MultiDataTrigger(); player1Trigger1.Conditions.Add(isOpponentCondition); player1Trigger1.Conditions.Add(opponentIsPlayer1); player1Trigger1.Setters.Add(player1Setter); var player1Trigger2 = new MultiDataTrigger(); player1Trigger2.Conditions.Add(isSelfPlayerCondition); player1Trigger2.Conditions.Add(selfPlayerIsPlayer1); player1Trigger2.Setters.Add(player1Setter); var player2Trigger1 = new MultiDataTrigger(); player2Trigger1.Conditions.Add(isOpponentCondition); player2Trigger1.Conditions.Add(opponentIsPlayer2); player2Trigger1.Setters.Add(player2Setter); var player2Trigger2 = new MultiDataTrigger(); player2Trigger2.Conditions.Add(isSelfPlayerCondition); player2Trigger2.Conditions.Add(selfPlayerIsPlayer2); player2Trigger2.Setters.Add(player2Setter); var visibilitySetter = new Setter(VisibilityProperty, Visibility.Visible); var visibilityTrigger = new DataTrigger { Binding = new Binding("IsAlive") { Source = piece }, Value = true }; visibilityTrigger.Setters.Add(visibilitySetter); var onAttackFontSizeSetter = new Setter(FontSizeProperty, button.FontSize * 2); var winningForegroundSetter = new Setter(ForegroundProperty, Brushes.Green); var winningTrigger = new DataTrigger { Binding = new Binding("IsDefeating") { Source = piece }, Value = true }; winningTrigger.Setters.Add(onAttackFontSizeSetter); winningTrigger.Setters.Add(winningForegroundSetter); var defeatStoryboard = new Storyboard { AccelerationRatio = 0.2 }; defeatStoryboard.Completed += (s, _) => DefeatStoryboard_Completed(); var defeatAnimation = new DoubleAnimation(0.1, new TimeSpan(0, 0, 0, 2, 0)); Storyboard.SetTarget(defeatAnimation, button); Storyboard.SetTargetProperty(defeatAnimation, new PropertyPath(FontSizeProperty)); defeatStoryboard.Children.Add(defeatAnimation); var beginSb = new BeginStoryboard { Storyboard = defeatStoryboard, Name = "DefeatStoryboard" }; var stopSb = new StopStoryboard { BeginStoryboardName = beginSb.Name }; var losingForegroundSetter = new Setter(ForegroundProperty, Brushes.Red); var losingTrigger = new DataTrigger { Binding = new Binding("IsBeingDefeated") { Source = piece }, Value = true }; losingTrigger.EnterActions.Add(beginSb); losingTrigger.ExitActions.Add(stopSb); losingTrigger.Setters.Add(onAttackFontSizeSetter); losingTrigger.Setters.Add(losingForegroundSetter); buttonStyle.Triggers.Add(player1Trigger1); buttonStyle.Triggers.Add(player1Trigger2); buttonStyle.Triggers.Add(player2Trigger1); buttonStyle.Triggers.Add(player2Trigger2); buttonStyle.Triggers.Add(visibilityTrigger); buttonStyle.Triggers.Add(winningTrigger); buttonStyle.Triggers.Add(losingTrigger); buttonStyle.RegisterName(beginSb.Name, beginSb); button.Style = buttonStyle; ApplyBinding("Column", piece, button, Grid.ColumnProperty); ApplyBinding("Row", piece, button, Grid.RowProperty); ApplyBinding("PowerLevel", piece, button, ContentProperty); Panel.SetZIndex(button, 2); this.CombateGrid.Children.Add(button); } this.CombateGridChildren = this.CombateGrid.Children.Cast <UIElement>(); base.OnApplyTemplate(); }