Как я могу анимировать показ / скрытие элемента в ItemsControl, но только если окно уже видно? - PullRequest
1 голос
/ 12 августа 2010

У меня есть ItemsControl с несколькими элементами, каждый из которых имеет свой экземпляр ViewModel.ViewModel каждого элемента знает, должен ли этот элемент быть видимым (в настоящее время каждый ViewModel имеет свойство Visibility, с которым связывается пользовательский интерфейс).Когда моё окно открывается впервые, некоторые из этих элементов видны, другие свернуты.Позже видимость некоторых элементов может измениться в ответ на взаимодействие с пользователем.Размер окна соответствует его содержимому, поэтому размер окна изменяется при отображении или скрытии элементов.И окно изначально центрировано на экране (что означает, что все должно быть правильно расположено сразу, чтобы окно знало свой начальный размер и могло соответственно отцентрироваться).

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

И я хочу, чтобы окно по-прежнему устанавливало свой первоначальный размер на основе его изначально видимого содержимого, и я по-прежнемухочу, чтобы это было первоначально сосредоточено на экране.(Хотя на самом деле, в этом случае было бы приемлемо, если бы он центрировался так, как будто все элементы были видны, если бы упорядочение событий заставило его работать таким образом.)

Я знаю немного о WPF, но яПризнаться, я потерян, когда дело доходит до триггеров и раскадровок.Я до сих пор ничего не делал с анимацией WPF, и я не уверен, с чего начать.

Я уже пробовал использовать Reveal из Bag of Tricks , но у меня было несколько проблемс этим, самое большое из того, что у него нет поведения «только использовать анимации после окна показано», которое мне нужно - мое окно появилось бы, и первоначально видимые элементы все еще анимировались бы вОн также не очень хорошо подходил для моего макета (он центрировал элементы по горизонтали, а не растягивал их по ширине ItemsControl) и несколько других проблем, которые могли или не могли бы быть исправлены.

I 'Я не слишком требователен к тому, чтобы анимировать, растягивая (например, анимируя LayoutTransform от SizeX = 1 SizeY = 0 до SizeX = 1 SizeY = 1, таким образом, начиная со сжатого текста и расширяясь до нормального размера) или просто изменяя Высота (таким образомначиная с только части контента, видимой и раскрывающей больше по мере развития анимации) - я в порядке с любой.

I 'Я открыт для написания своего собственного потомка Panel (я делал это раньше), если это лучший способ решить эту проблему, и я всегда могу украсть код из Reveal и взломать, пока я не получу его работу - но кажется, что это уже должно бытьболее простой способ сделать это, если бы я просто знал, что это было.Я открыт для изучения триггеров и раскадровок или чего-то еще, если кто-то может указать мне правильное направление.

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