MVVM в Silverlight и анимации - PullRequest
       0

MVVM в Silverlight и анимации

1 голос
/ 01 сентября 2011

Учитывая, что у нас есть следующее представление:

<StackPanel>

<TextBlock Text="Some text"/>
<Image Source="{Binding vmImageProp}" Height="10" Visibility="{Binding vmImageVisProp}" />

<StackPanel/>

При запуске, когда ViewModel инициализируется и привязывается к представлению, для vmImageVisProp устанавливается значение Collapsed.Это правильно, мне не нужно резервировать место для скрытого изображения.

В какой-то момент выполнения приложения логика говорит ВМ сделать изображение видимым.Если я просто установлю свойство vmImageVisProp на Visible, моя StackPanel мгновенно изменит размер, создав нежелательный эффект скачка.

Но Я хочу анимировать плавное изменение размера StackPanel , а затем, когда пустое пространство будет готово, изображение появится там.

Я знаю, как создать последовательность анимаций для этого.

Чего я не знаю, так это как обойти неизвестный конечный размер StackPanel.Мне нужно знать это, чтобы сообщить анимации, насколько большим должно быть значение высоты StackPanels.

Я знаю, что высота панелей стека должна увеличиться на 10 (высота появляющегося изображения),но когда я определяю анимацию, мне нужно явно установить результирующую высоту на stackPanel.

Поскольку я должен выполнить анимацию из кода ViewModel, я мог бы рассчитать ее на лету, но я не знаю, как получить высоту StackPanel, поскольку viewModel ничего не знает об этом.

Как правильно анимировать вставку такого изображения?

Ответы [ 2 ]

0 голосов
/ 02 сентября 2011

На случай, если кому-то понадобится решение для дальнейшего использования:

Я нашел эту статью в блоге: http://dotnetbyexample.blogspot.com/2011/01/viewmodel-driven-animations-using.html

Это показывает, как я могу использовать анимацию, управляемую ViewModel, используя функции Visual State Manager.

Именно то, что мне нужно.

0 голосов
/ 01 сентября 2011

В WPF и Silverlight (для Интернета) существует значение Visibility.Hidden , которое скрывает элемент, но резервирует место, которое ему потребуется.Тем не менее, я думаю, что это недоступно в Silverlight для Windows Phone 7.

В качестве альтернативы, как насчет установки значения Opacity на ноль изображения, а затем установки его на 1, чтобы показать его?При нулевой непрозрачности у вас будет высота / ширина изображения, доступная вам для анимации.

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