У меня есть пользовательский интерфейс с вкладками (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, но это не помогло.
Есть ли способ «освободить мой контроль», чтобы он мог перемещаться по экрану, не обрезаясь?