protected override void OnTemplateApplied(TemplateAppliedEventArgs e) { base.OnTemplateApplied(e); var canvas = e.NameScope.Get <Canvas>("PART_Canvas"); var pieceControlEasing = LinearEasing.For <double>(); var pieceControlPropertyTransitionsX = new PropertyTransition(Canvas.LeftProperty, TimeSpan.FromSeconds(0.075), pieceControlEasing); var pieceControlPropertyTransitionsY = new PropertyTransition(Canvas.TopProperty, TimeSpan.FromSeconds(0.075), pieceControlEasing); foreach (var piece in (PuzzlePiece[])Enum.GetValues(typeof(PuzzlePiece))) { if (piece != PuzzlePiece.Space) { var pieceControl = new PuzzlePieceControl(); pieceControl.DataContext = piece; // Setting default values for Canvas properties since property transition doesn't work with NaN values pieceControl.SetValue(Canvas.LeftProperty, 0.0); pieceControl.SetValue(Canvas.TopProperty, 0.0); pieceControl.PropertyTransitions.Add(pieceControlPropertyTransitionsX); pieceControl.PropertyTransitions.Add(pieceControlPropertyTransitionsY); pieceControl.Tapped += OnPieceControlTapped; canvas.Children.Add(pieceControl); } } _pieceControls = canvas.Children; }
static void Main(String[] args) { Actor actor; Stage stage; Canvas canvas; Transition transition; if (Application.Init() != InitError.Success) { return; } stage = new Stage(); stage.Title = "Rectangle with rounded corners"; stage.BackgroundColor = Clutter.Color.New(255, 255, 255, 255); stage.SetSize(500, 500); stage.Show(); canvas = (Canvas)Canvas.New(); canvas.SetSize(300, 300); actor = new Actor(); actor.Content = canvas; actor.ContentGravity = ContentGravity.Center; actor.SetContentScalingFilters(ScalingFilter.Trilinear, ScalingFilter.Linear); actor.SetPivotPoint(0.5f, 0.5f); actor.AddConstraint(new BindConstraint(stage, BindCoordinate.Size, 0f)); stage.AddChild(actor); transition = new PropertyTransition("rotation-angle-y"); transition.FromValue = new GLib.Value(0.0); transition.ToValue = new GLib.Value(360.0); ((Timeline)transition).Duration = 2000; ((Timeline)transition).RepeatCount = -1; actor.AddTransition("rotateActor", transition); stage.Destroyed += (sender, e) => Application.MainQuit(); canvas.Drawn += DrawContent; canvas.Invalidate(); Application.Main(); }