2011-04-15 30 views
1

我有一個應用程序,其中有一個最高級別的MainWindow,其中包含多個UserControls。我在一個UserControls上有一個Button,並且想要在另一個UserControls中觸發一個動畫。如何去做呢?我已經嘗試過Blend,但時間軸不允許我訪問其他UserControls。如何從另一個用戶控件觸發動畫?

總之,我想在我的現有應用程序旁邊顯示一個UserControl(例如X),該按鈕將單擊按鈕時淡入。按鈕單擊在另一個用戶控件中,如Y,並且UserControl X和UserControl Y都位於MainWindow內。我希望我已經說清楚了。

回答

5

一個例子:

<local:TimeBox x:Name="timeBox"> 
    <local:TimeBox.RenderTransform> 
     <TranslateTransform /> 
    </local:TimeBox.RenderTransform> 
</local:TimeBox> 

<local:CustomComboBox> 
    <local:CustomComboBox.Triggers> 
     <EventTrigger RoutedEvent="local:CustomComboBox.ApplyClick"> 
      <BeginStoryboard> 
       <Storyboard> 
        <DoubleAnimation Storyboard.Target="{x:Reference timeBox}" 
            Storyboard.TargetProperty="RenderTransform.X" 
            From="-500" To="0" Duration="0:0:1"> 
         <DoubleAnimation.EasingFunction> 
          <ExponentialEase Exponent="5" EasingMode="EaseOut"/> 
         </DoubleAnimation.EasingFunction> 
        </DoubleAnimation> 
       </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger> 
    </local:CustomComboBox.Triggers> 
</local:CustomComboBox> 

注:
- 該TranslateTransform不能有一個名字,所以你需要找到它使用RenderTransform.X
的用戶控件開始 - 的應該觸發動畫的事件需要是RoutedEvent,這裏是我所擁有的代碼:

public static RoutedEvent ApplyClickEvent = EventManager.RegisterRoutedEvent("ApplyClick", 
    RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(CustomComboBox)); 
public event RoutedEventHandler ApplyClick 
{ 
    add { AddHandler(ApplyClickEvent, value); } 
    remove { RemoveHandler(ApplyClickEvent, value); } 
} 

//Pipes the event from an internal button. 
private void Button_Apply_Click(object sender, RoutedEventArgs e) 
{ 
    RaiseEvent(new RoutedEventArgs(ApplyClickEvent, this)); 
} 
相關問題