Всем доброго времени суток. Хочу поделиться с вами вот какой информацией. На днях я стал создавать приложение для магазина приложений Windows 8. Мне хотелось закодить анимацию объектов с использованием таймера. Ранее я использовал таймер в Delphi для подобных же целей, но в данной ситуации все оказалось немного сложнее, чем я представлял. В Delphi таймер был объектом, а тут в С # — это класс. Я сразу же полез в инет за поиском решения, но увы наткнулся на реализацию примеров под Windows Forms, где также существует объект таймер. Так что, пришлось разбираться самому. Я создал пустое приложение (XAML). Затем поместил на сцену три простых объекта: Rectangle (дал ему имя rect), Textblock (rr) и объект Button, запускающую таймер.
Код для MainPage.xaml.cs
public sealed partial class MainPage: Page
{
int rr1 = 10; bool k = true; rr1 — переменная типа int для смещения rect, k — флажок
public MainPage()
{
this.InitializeComponent();
}
Объявив публично переменные, нажимаем на обработчик событий для объекта Button. Выбираем событие Tapped.
Код для обработчика события Tapped:
private void Button_Tapped_1(object sender, TappedRoutedEventArgs e)
{
DispatcherTimer tt= new DispatcherTimer(); задаем наш класс DispatcherTimer
tt.Interval=new TimeSpan(0,0,0,0,2); выставляем интервал в 2 милисекунды.
tt.Tick += tt_Tick;
tt.Start();
if (k == false) { tt.Stop(); }
}
void tt_Tick(object sender, object e)
{
// throw new NotImplementedException();
rr1 = rr1 + 2;
if (rect.Margin.Bottom > 200) { k = false; }
else
{
rect.Margin = new Thickness(rr1, rr1, rr1, rr1);
rr.Text = Convert.ToString(rr1);
}
А теперь подробнее. Наш tt имеет класс DispatcherTimer. Интервал устанавливается в виде промежутка времени. Формат такой: День, час, минута, секунда, милисекунда. Указав временной период одиночного «прохода» таймера, мы вносим tt.Tick и затем задаем старт нашего таймера.
Зажав клавишу TAB, прописывая Tick, — процедура Tick создастся автоматически. Как раз в этой самой процедуре мы указываем, что же конкретно должно выполниться за наш период работы таймера TimeSpan(0,0,0,0,2), то есть 2 милисекунды.
А выполняется следующее:
1) прибавляется отступ за счет увеличения переменной rr1 ( rr1 = rr1 + 2;)
2) Условие проверки. Анимация в данном случае «обрывается» в том случае, если наш rect вышел за границу 200. Если он за границей 200, то флажок принимает значение false, а это ведет к прекращению работы таймера. Но пока таймер работает, наш rect движется по диагонали ( rect.Margin = new Thickness(rr1, rr1, rr1, rr1);).
Это простой пример использования класса DispatcherTimer. В процедуре Tick реализован простой код смены координат относитльно края у объекта rect. С помощью этого примера удасться сделать легкую анимацию например, на выпад какого-либо объекта. Всем спасибо.
Код для MainPage.xaml.cs
public sealed partial class MainPage: Page
{
int rr1 = 10; bool k = true; rr1 — переменная типа int для смещения rect, k — флажок
public MainPage()
{
this.InitializeComponent();
}
Объявив публично переменные, нажимаем на обработчик событий для объекта Button. Выбираем событие Tapped.
Код для обработчика события Tapped:
private void Button_Tapped_1(object sender, TappedRoutedEventArgs e)
{
DispatcherTimer tt= new DispatcherTimer(); задаем наш класс DispatcherTimer
tt.Interval=new TimeSpan(0,0,0,0,2); выставляем интервал в 2 милисекунды.
tt.Tick += tt_Tick;
tt.Start();
if (k == false) { tt.Stop(); }
}
void tt_Tick(object sender, object e)
{
// throw new NotImplementedException();
rr1 = rr1 + 2;
if (rect.Margin.Bottom > 200) { k = false; }
else
{
rect.Margin = new Thickness(rr1, rr1, rr1, rr1);
rr.Text = Convert.ToString(rr1);
}
А теперь подробнее. Наш tt имеет класс DispatcherTimer. Интервал устанавливается в виде промежутка времени. Формат такой: День, час, минута, секунда, милисекунда. Указав временной период одиночного «прохода» таймера, мы вносим tt.Tick и затем задаем старт нашего таймера.
Зажав клавишу TAB, прописывая Tick, — процедура Tick создастся автоматически. Как раз в этой самой процедуре мы указываем, что же конкретно должно выполниться за наш период работы таймера TimeSpan(0,0,0,0,2), то есть 2 милисекунды.
А выполняется следующее:
1) прибавляется отступ за счет увеличения переменной rr1 ( rr1 = rr1 + 2;)
2) Условие проверки. Анимация в данном случае «обрывается» в том случае, если наш rect вышел за границу 200. Если он за границей 200, то флажок принимает значение false, а это ведет к прекращению работы таймера. Но пока таймер работает, наш rect движется по диагонали ( rect.Margin = new Thickness(rr1, rr1, rr1, rr1);).
Это простой пример использования класса DispatcherTimer. В процедуре Tick реализован простой код смены координат относитльно края у объекта rect. С помощью этого примера удасться сделать легкую анимацию например, на выпад какого-либо объекта. Всем спасибо.