У меня есть довольно простой сценарий, который я пытаюсь реализовать в Silverlight, но, несмотря на всю невероятно мощную функциональность переходов в Silverlight / Blend 4, я просто не могу понять, как это сделать.
У меня есть макет, который сводится к следующему:
<UserControl>
<Grid>
<StackPanel>
<Button x:Name="Button1" />
<Button x:Name="Button2" />
<Button x:Name="Button3" />
<Button x:Name="Button4" />
</StackPanel>
<Grid x:Name="Page1" />
<Grid x:Name="Page2" />
<Grid x:Name="Page3" />
<Grid x:Name="Page4" />
</Grid>
</UserControl>
Сначала все четыре сетки страниц скрыты и масштабируются до нулевого размера, но когда вы нажимаете соответствующую кнопку, страница должна отображаться с растущей анимацией. При нажатии другой кнопки предыдущая страница должна исчезнуть с уменьшающейся анимацией, а другая страница должна появиться с растущей анимацией. Таким образом, вы можете использовать кнопки для перехода между всеми четырьмя страницами.
Из того, что я прочитал, «правильный» способ сделать это - использовать визуальные состояния в пользовательском элементе управления. Итак, я создал четыре состояния, от Page1 до Page4, и для каждого состояния установил соответствующую сетку страниц для отображения. Затем я помещаю команды на кнопки, чтобы изменить визуальное состояние пользовательского элемента управления. Это работало нормально, и я мог переключаться между страницами, но когда я начал пытаться определять анимацию между состояниями, у меня возникли проблемы.
Сначала я подумал, что могу определить анимацию «Кому *» и «От *» для каждого состояния. Итак, когда вы были в состоянии Page1 и нажали кнопку, чтобы перейти в состояние Page2, он воспроизвел бы анимацию «От *», скрывающую страницу 1, а затем анимацию «Кому *», отображающую страницу 2. Но это не работает. Даже если вы определили анимацию «Кому *» и «От *» для каждого состояния, Silverlight воспроизводит только анимацию «Кому *» и полностью игнорирует анимацию «От *»!
Хуже того, похоже, что Silverlight и должен работать именно так, хотя в этом нет никакого смысла! Это означает, что если я хочу, чтобы каждая страница сжималась, а затем на ее месте росла другая страница, мне пришлось бы определять отдельный переход от каждого состояния к другому состоянию! Для моих текущих четырех страниц это означало бы двенадцать отдельных переходов, но когда я хочу увеличить количество страниц, это число будет расти. На десять страниц потребуется 9 * 9 = 81 переход! Все для того, чтобы текущая страница уменьшилась, а новая - увеличилась.
Я не могу поверить, что нет лучшего способа справиться с таким простым сценарием, но я не могу найти ничего, чтобы сказать, как это сделать. Я мог бы, вероятно, взломать его вместе, используя программную часть, которая изменяет раскадровки, но я хочу разрешить просмотр и редактирование сеток страниц в Blend, а также все, что я читаю, говорит, чтобы избежать использования скрытого кода и использовать модели просмотра и визуальные состояния для обработки вещей
Скажите, пожалуйста, мне не хватает чего-то очевидного?