Лучший отвечающий
Анимация Grid C#/WPF

Вопрос
-
Как сделать анимацию Grid'a что бы он выплывал сверху?26 апреля 2016 г. 20:10
Ответы
-
Смотря где 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 окна. Так что это нужно тоже предусмотреть.
- Помечено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 9 мая 2016 г. 8:07
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 окна. Так что это нужно тоже предусмотреть.
- Помечено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 9 мая 2016 г. 8:07
27 апреля 2016 г. 11:18 -
Я конечно дико извиняюсь, но делать анимацию в WPF так как написано в этом ответе, равносильно натирания мяса в фарш на терке.
Куда логичнее сначала с помощью трансформации спрятать наш Grid, а затем с помощью анимации показать.
VB.Net - WPF, UWP
11 мая 2016 г. 7:42Отвечающий