using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Threading;  //DispatcherPriority, timer

namespace moveButton
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            
        }
        // interwał timera w ms
        private const int TIMER_INTERVAL = 100;

        // tworzymy timer
        private System.Windows.Threading.DispatcherTimer timer = new DispatcherTimer { Interval = TimeSpan.FromMilliseconds(TIMER_INTERVAL) };

        // współrzędna x przycisku na początku
        private int x = 10;

        // flaga stanu przycisku określająca czy przycisk się porusza czy nie 
        private bool isMoving = false;

        // po kliknięciu przycisk zaczyna sie poruszać w prawo
        // po powtórnym kliknieciu przycisk zatrzymuje się
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            // jeśli przycisk się porusza
            if (isMoving)
            {
                // zmieniamy flagę
                isMoving = false;
                // stopujemy timer
                timer.Stop();
                // zmieniamy napis na przycisku
                btnMove.Content = "I'm stopped!";
            }
            // jeśli przycisk się nie porusza
            else
            {
                // startujemy timer
                timer.Start();
                // zmieniamy napis na przycisku
                btnMove.Content = "I'm moving!";
                // pobieramy marginesy przycisku
                Thickness margin = btnMove.Margin;
                // kod trigerowany przez timer co TIMER_INTERVAL ms
                timer.Tick += (sender, args) =>
                {
                // ustawiamy lewy margines przycisku na wpółrzędną x
                margin.Left = x;
                    btnMove.Margin = margin;
                // inkrementacja wpółrzędnej x przycisku
                x++;
                // zabezpieczenie żeby wprzycisk nie uciekł z okna
                if (x == Form1.Width)
                    {
                        x = 0;
                    }
                };
                // zmieniamy flagę przycisku
                isMoving = true;
            }
        }
    }
}