c# WPF. NET Ядро - Как одушевить контроль со стороны родителей? - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть пользовательский интерфейс с вкладками (WPF), например:

 ___   ___
/ A \_/_B_\_____
|  ___________  |
| |  (List)   | |
| |  ______   | |
| | | Data |  | |
| | |______|  | |
| |  ______   | |
| | | Data |  | |
| | |______|  | |
| |  ______   | |
| | | Data |  | |
| | |______|  | |
| |___________| |
|_______________|

В каждом разделе «Данные» есть данные (дух), но есть кнопка, которая вызывает изменение состояния данных. так что он исчезает из вкладки A и появляется вместо этого во вкладке B. Так или иначе, это дизайн, который хочет клиент, так что, к сожалению, реструктуризация не вариант.

Так что сейчас, когда пользователь нажимает кнопку в разделе данных данные просто исчезают, и пользователь должен «знать», что теперь он перемещен на вкладку B. Чтобы показать пользователю, что происходит, я представлял себе анимацию блока данных, когда пользователь нажимает кнопку, чтобы она сжималась и перемещается к вкладке, помеченной буквой «B», и, возможно, даже имеет импульс табуляции, когда он туда попадает, или что-то в этом роде.

У меня работает код анимации, было немного сложно убедить раскадровку анимировать положение и размер одновременно, но благодаря предыдущему ответу StackOverflow я смог написать это, и это работает:

TransformGroup group = new TransformGroup();
TranslateTransform trans = new TranslateTransform();
group.Children.Add(trans);
ScaleTransform scale = new ScaleTransform(1, 1);
group.Children.Add(scale);
RenderTransform = group;

var storyBoard = new Storyboard();

var yMove = new DoubleAnimation(0, newY, new Duration(new TimeSpan(0, 0, 3)));
Storyboard.SetTarget(yMove, this);
Storyboard.SetTargetProperty(yMove, new PropertyPath("RenderTransform.Children[0].Y"));
storyBoard.Children.Add(yMove);

var xMove = new DoubleAnimation(0, newX, new Duration(new TimeSpan(0, 0, 3)));
Storyboard.SetTarget(xMove, this);
Storyboard.SetTargetProperty(xMove, new PropertyPath("RenderTransform.Children[0].X"));
storyBoard.Children.Add(xMove);

var width = new DoubleAnimation(1, scaledWidth, new Duration(new TimeSpan(0, 0, 3)));
Storyboard.SetTarget(width, this);
Storyboard.SetTargetProperty(width, new PropertyPath("RenderTransform.Children[1].ScaleX"));
storyBoard.Children.Add(width);

var height = new DoubleAnimation(1, scaledHeight, new Duration(new TimeSpan(0, 0, 3)));
Storyboard.SetTarget(height, this);
Storyboard.SetTargetProperty(height, new PropertyPath("RenderTransform.Children[1].ScaleY"));
storyBoard.Children.Add(height);

storyBoard.Begin(this);

Проблема в том, что как только Если элемент управления данными пытается выйти за пределы своего родителя, он обрезается. Я попытался установить для ClipToBounds значение false, но это не помогло.

Есть ли способ «освободить мой контроль», чтобы он мог перемещаться по экрану, не обрезаясь?

1 Ответ

0 голосов
/ 09 апреля 2020

Вы можете попытаться использовать слой с надписью, там вы можете свободно перемещать объекты куда хотите. Вы можете создать тот же элемент управления в слое Adorner, свернуть свой фактический элемент управления и затем анимировать элемент управления в слое Adorner.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...