none
Анимация Grid C#/WPF RRS feed

Ответы

  • Смотря где Grid находится. Вот, например, если он лежит на форме диалогового окна, то сначала нужно запросить его оттуда, а потом уже перемещать в нужное место. Главное, чтобы он там имел стиль WS_CHILD.

    // создаём переменные
    HWND hwnd = NULL;
    int position1 = (начальная точка движения),
         position2 = (конечная точка движения),
         posx = ( положение по горизонтали);
    // запрашиваем дескриптор грида
    hwnd =  GetDlgItem(HWND, IDC_GRIDVIEW);
    // создаём цикл, в котором будет производится движение нашего контрола
    do
    {
    //задаём позицию
    SetWindowPos(
      hwnd ,
      0,
      posx, // X
      pos  // Y,
      null,
      null, 
      SWP_NOSIZE // чтобы игнорировал предыдущие два параметра
    );
     pos--; // если надо нелинейных движений здесь надо использовать формулу типа "pos = pos*pos-10"
    // цикл будет повторятся до тех пор, пока верно
    }while(pos!=position2);

    Вот и всё. Даже если дело не в диалоговом окне, то принцип всё равно тот же. Стоит помнить, что если этот цикл не будет в отдельном потоке, то во время работы будет висеть всё UI окна. Так что это нужно тоже предусмотреть.

    27 апреля 2016 г. 11:18

Все ответы

  • Смотря где Grid находится. Вот, например, если он лежит на форме диалогового окна, то сначала нужно запросить его оттуда, а потом уже перемещать в нужное место. Главное, чтобы он там имел стиль WS_CHILD.

    // создаём переменные
    HWND hwnd = NULL;
    int position1 = (начальная точка движения),
         position2 = (конечная точка движения),
         posx = ( положение по горизонтали);
    // запрашиваем дескриптор грида
    hwnd =  GetDlgItem(HWND, IDC_GRIDVIEW);
    // создаём цикл, в котором будет производится движение нашего контрола
    do
    {
    //задаём позицию
    SetWindowPos(
      hwnd ,
      0,
      posx, // X
      pos  // Y,
      null,
      null, 
      SWP_NOSIZE // чтобы игнорировал предыдущие два параметра
    );
     pos--; // если надо нелинейных движений здесь надо использовать формулу типа "pos = pos*pos-10"
    // цикл будет повторятся до тех пор, пока верно
    }while(pos!=position2);

    Вот и всё. Даже если дело не в диалоговом окне, то принцип всё равно тот же. Стоит помнить, что если этот цикл не будет в отдельном потоке, то во время работы будет висеть всё UI окна. Так что это нужно тоже предусмотреть.

    27 апреля 2016 г. 11:18
  • Я конечно дико извиняюсь, но делать анимацию в WPF так как написано в этом ответе, равносильно натирания мяса в фарш на терке.

    Куда логичнее сначала с помощью трансформации спрятать наш Grid, а затем с помощью анимации показать.


    VB.Net - WPF, UWP

    Отвечающий