我的答案在
this blog post
. 事实证明,设置高度或宽度属性的动画时存在问题。我用溶解效果而不是擦拭来解决这个问题。若要设置溶解动画,请在同一网格行和列中声明这两个控件,这两个控件将在彼此的顶部加载它们。最后声明默认控件,使其成为可见控件。然后,将默认控件的不透明度值设置为零以隐藏它,然后返回到1以显示它。
如果要设置动画的控件是用户控件或需要单击的其他控件,则需要再执行一步。这是因为将控件的不透明度设置为零只会使其不可见。它仍然会阻止单击它下面的控件。因此,在默认控件上声明一个render.transform,然后在不可见时将scaley属性设置为0,在显示时将其设置为1。
下面是我正在开发的生产应用程序的一个示例。它在资源管理器样式界面的导航器窗格中在注释列表和日历(两个不同的用户控件)之间切换。以下是两个控制措施的声明:
<!-- ClientArea: Navigator -->
<Grid x:Name="Navigator">
<View:CalendarNavigator x:Name="Calendar" />
<View:NoteListNavigator x:Name="NoteList">
<View:NoteListNavigator.RenderTransform>
<ScaleTransform ScaleX="1" ScaleY="1" />
</View:NoteListNavigator.RenderTransform>
</View:NoteListNavigator>
</Grid>
注意的声明
ScaleTransform
在笔记列表上。我使用几个功能区按钮在两个用户控件之间切换:
<ribbon:RibbonToggleButton x:Name="NoteListViewButton" LargeImageSource="..\Images\ListViewLarge.png" SmallImageSource="..\Images\ListViewSmall.png" Label="Note List" Click="OnViewButtonClick">
<ribbon:RibbonToggleButton.Triggers>
<EventTrigger RoutedEvent="ribbon:RibbonToggleButton.Checked">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="NoteList" Storyboard.TargetProperty="(View:NoteListNavigator.RenderTransform).(ScaleTransform.ScaleY)" To="1" Duration="0:0:0" />
<DoubleAnimation Storyboard.TargetName="NoteList" Storyboard.TargetProperty="Opacity" To="1" Duration="0:0:1" />
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</ribbon:RibbonToggleButton.Triggers>
</ribbon:RibbonToggleButton>
<ribbon:RibbonToggleButton x:Name="CalendarViewButton" LargeImageSource="..\Images\CalendarViewLarge.png" SmallImageSource="..\Images\CalendarViewSmall.png" Label="Calendar" Click="OnViewButtonClick">
<ribbon:RibbonToggleButton.Triggers>
<EventTrigger RoutedEvent="ribbon:RibbonToggleButton.Checked">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="NoteList" Storyboard.TargetProperty="Opacity" To="0" Duration="0:0:1" />
<DoubleAnimation Storyboard.TargetName="NoteList" Storyboard.TargetProperty="(View:NoteListNavigator.RenderTransform).(ScaleTransform.ScaleY)" To="0" Duration="0:0:0" />
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</ribbon:RibbonToggleButton.Triggers>
</ribbon:RibbonToggleButton>
当日历显示时,scaley转换会使不可见的笔记列表偏离方向,以便我可以单击日历控件。请注意,我需要对故事板中的scaley属性进行完全限定的引用。这就是为什么引用用括号括起来的原因。
希望这能帮助其他人!很可能是我,因为我可能会忘记我是怎么做的…