鉴于我们有以下观点:
<StackPanel>
<TextBlock Text="Some text"/>
<Image Source="{Binding vmImageProp}" Height="10" Visibility="{Binding vmImageVisProp}" />
<StackPanel/>
在启动时,当 ViewModel 被初始化并绑定(bind)到 View 时,
vmImageVisProp
设置为已折叠。没错,我不需要为隐藏图像预留空间。在应用程序执行的某个点,一个逻辑告诉 VM 使 Image 可见。如果我只是设置
vmImageVisProp
属性(property)给 Visible
,我的 StackPanel 会立即重新调整大小,从而产生不想要的跳跃效果。但是我想为 StackPanel 的平滑调整大小设置动画,然后,当空白空间准备好时,图像就会出现在那里。
我知道如何为此制作一系列动画。
我不知道的是如何解决 StackPanel 的未知最终大小。我需要知道它才能告诉动画 StackPanels 的高度值应该有多大。
我知道堆栈面板的高度应该增加 10(出现图像的高度),但是当我定义动画时,我需要在 stackPanel 上显式设置结果高度。
由于我要从 ViewModel 代码执行动画,我可以即时计算它,但我不知道如何获取 StackPanel 的高度,因为 viewModel 对此一无所知。
为这种图像插入设置动画的正确方法是什么?
最佳答案
使用 WPF 和 Silverlight(用于网络)有一个 Visibility.Hidden隐藏元素但保留所需空间的值。但是,我认为这在 Silverlight for Windows Phone 7 中不可用。
作为替代方案,如何设置图像的 Opacity
为零,然后将其设置为 1 以显示它?使用零不透明度,您将可以使用图像高度/宽度来执行动画。
关于windows-phone-7 - Silverlight 和动画中的 MVVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7274279/