2009-07-07 80 views
1

感谢this stackoverflow question上的答案,我能够获得以下动画,以便当我的ViewModel属性的值设置为工具栏时淡入淡出。如何制作XAML动画使元素在消失后消失

的问题是:

  • 工具栏不透明度淡出,但它占去了的空间仍然存在,它淡出
  • 后的初始工具栏状态不同步与的价值视图模型属性

但我怎么处理下列条件的,在XAML本身,如果可能的话:

  • 工具栏(边框)淡出,然后我怎么说“那么只有然后可视性=折叠”,(可能两个动画同时发生或链接动画,所以visibile =折叠发生在第一个动画之后), 编辑:我自从加入低于该触发透明度= 0的伟大工程
  • 工具栏变淡在,我怎么说之前的“公开程度=正常”
  • 我怎么也重视这些事件不仅到视图加载过程,以便它们在页面第一次出现时显示正确的状态(淡入或淡出)?

这是到目前为止我的动画:

<Style x:Key="PageToolBarStyle" TargetType="Border"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding PageToolBarVisible}" Value="true"> 

       <DataTrigger.EnterActions> 
        <BeginStoryboard> 
         <Storyboard> 
          <DoubleAnimation 
           Storyboard.TargetProperty="Opacity" 
           From="0.0" 
           To="1.0" 
           Duration="0:0:2"/> 
         </Storyboard> 
        </BeginStoryboard> 
       </DataTrigger.EnterActions> 

       <DataTrigger.ExitActions> 
        <BeginStoryboard> 
         <Storyboard> 
          <DoubleAnimation 
           Storyboard.TargetProperty="Opacity" 
           From="1.0" 
           To="0.0" 
           Duration="0:0:2"/> 
         </Storyboard> 
        </BeginStoryboard> 
       </DataTrigger.ExitActions> 

      </DataTrigger> 

      <Trigger Property="Opacity" Value="0"> 
       <Setter Property="Visibility" Value="Collapsed"/> 
      </Trigger> 

     </Style.Triggers> 
    </Style> 

<Window.Triggers> 
    <EventTrigger RoutedEvent="FrameworkElement.Loaded"> 
     <EventTrigger.Actions> 
      ...how can I tell it here to "do the trigger logic contained in "PageToolBarStyle"... 
     </EventTrigger.Actions> 
    </EventTrigger> 
</Window.Triggers> 

回答

2

您可以为有问题的元素上的不透明度的触发器。一旦这是“0”,你可以设置元素的可见性。这应该处理上面的第一和第二点。

至于第三点...如果我正确理解你,那么就有一个FrameworkElement.Loaded事件,你可以用它来解决第一次加载视图时运行动画的问题。

+0

FraneworkElement.Loaded应该是Window.Triggers的一部分。至于不透明度触发器,我不知道为什么这不起作用。另一种方法是在完成的事件中添加一个方法来设置代码隐藏的可见性(但是我知道你想保留在XAML中) – 2009-07-07 13:14:04