2015-10-26 35 views
0

我正在用滑入及滑出效果彈出彈出動畫。
我想通了「在」部分。當控件的網格加載時,我添加了一個EventTrigger以開始故事板。的Windows Phone - 自來水

<Grid.Triggers> 
    <EventTrigger RoutedEvent="Grid.Loaded"> 
     <BeginStoryboard> 
      <Storyboard> 
       <DoubleAnimation Storyboard.TargetName="SlideTransform" 
           Storyboard.TargetProperty="Y" 
           From="1000" To="0" Duration="0:0:0.25"/> 
      </Storyboard> 
     </BeginStoryboard> 
    </EventTrigger> 
</Grid.Triggers> 

<Grid.RenderTransform> 
    <TranslateTransform x:Name="SlideTransform" Y="1000"/> 
</Grid.RenderTransform> 

我還一個ViewModel命令綁定到輕敲事件來關閉彈出:

<i:Interaction.Triggers> 
    <i:EventTrigger EventName="Tap"> 
     <cmd:EventToCommand Command="{Binding DismissCommand}"/> 
    </i:EventTrigger> 
</i:Interaction.Triggers> 

此命令也用於放置在該網格下方(在「LayoutRoot」主網格)的按鈕。
所有這一切工作正常。

現在,這裏的問題 - 我需要之前,彈出被關閉,添加一個「滑出」的動畫。我不能添加

<EventTrigger RoutedEvent="Grid.Tap"> 

因爲我在啓動時得到一個XAML解析異常:

其他信息:無法分配財產「System.Windows.EventTrigger.RoutedEvent」。

我試着給整個控件添加一個「Tap」事件處理程序,但是好像ViewModel命令先被觸發並關閉了整個彈出窗口。
對我怎麼可能把它放在一起任何想法?

回答

0

所以我想通了爲好,萬一有人很感興趣。
在每個按鈕的點擊事件中,我調用一個方法,即準備並觸發動畫:

private void DismissButton_Tap(object sender, System.Windows.Input.GestureEventArgs e) 
{ 
    this.dismissAll = false; 
    this.PrepareAndStartSlideOutAnimation(); 
} 

private void DismissAllButton_Tap(object sender, System.Windows.Input.GestureEventArgs e) 
{ 
    this.dismissAll = true; 
    this.PrepareAndStartSlideOutAnimation(); 
} 

private void PrepareAndStartSlideOutAnimation() 
{ 
    Storyboard s = new Storyboard(); 
    DoubleAnimation animation = new DoubleAnimation(); 
    animation.From = 0; 
    animation.To = 1000; 
    animation.Duration = new Duration(TimeSpan.FromMilliseconds(250)); 

    LayoutRoot.RenderTransform = new CompositeTransform(); 

    Storyboard.SetTarget(animation, LayoutRoot); 
    Storyboard.SetTargetProperty(animation, new PropertyPath("(UIElement.RenderTransform).(CompositeTransform.TranslateY)")); 

    s.Completed += SlideOutAnimation_Completed; 
    s.Children.Add(animation); 
    s.Begin(); 
} 

,並在動畫完成的時候,我從DataContext的執行命令:

private void SlideOutAnimation_Completed(object sender, EventArgs e) 
{ 
    if (!this.dismissAll) 
     (this.DataContext as HelpOverlayControlViewModel).DismissCommand.Execute(null); 
    else 
     (this.DataContext as HelpOverlayControlViewModel).DismissAllCommand.Execute(null); 
} 

這不是大多數「MVVMy」的解決方案,但我猜彈出動畫不是ViewModel的真正關注點,所以我會保持原樣。