2009-07-07 46 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