2016-04-01 39 views
0

我用故事板爲了做動畫:如何在另一視圖的目標元素上使用故事板?

<Button.Triggers> 
       <EventTrigger RoutedEvent="Button.Click"> 
        <BeginStoryboard> 
         <Storyboard> 
          <DoubleAnimation Storyboard.TargetName="Studio" Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:2"/> 
          <DoubleAnimation Storyboard.TargetName="Animation" Storyboard.TargetProperty="Opacity" From="0" To="0.3" Duration="0:0:2"/> 
          <DoubleAnimation Storyboard.TargetName="Record" Storyboard.TargetProperty="Opacity" From="0" To="0.3" Duration="0:0:2"/> 
          <DoubleAnimation Storyboard.TargetName="Info" Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:2"/> 
          <DoubleAnimation Storyboard.TargetName="info_content" Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:2"/> 
         </Storyboard> 
        </BeginStoryboard> 
       </EventTrigger> 
      </Button.Triggers> 

,但目標是在另一種觀點認爲XAML。我假設我應該使用ViewModel來訪問它們,但是我需要一些更多的提示。

回答

1

我創建了一個UserControlButton,並試圖animate該按鈕從MainWindow

問題:您需要參考您要設置動畫的Button,以便您可以將它用於Storyboard.Target屬性。這可以使用適當的處理程序來解決。我使用Window的Loaded事件,並使用UserControlFindName()方法。

FindName()返回可以使用DP進行公開的對象,也可以使用INPC支持的普通屬性。

此引用然後綁定到Storyboard.Target屬性。

主窗口:

 <Button ...> 
      <Button.Triggers> 
       <EventTrigger RoutedEvent="Button.Click"> 
        <BeginStoryboard> 
         <Storyboard Name="Sb1"> 
          <DoubleAnimation To="150.0" 
            Duration="0:0:2" 
            Storyboard.Target="{Binding TargetBtn, Mode=OneWay}" 
            Storyboard.TargetProperty="Width"/> 
         </Storyboard> 
        </BeginStoryboard> 
       </EventTrigger> 
      </Button.Triggers> 
     </Button> 

代碼,

集的DataContext爲窗口,this.DataContext = this;

private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    // TargetBtn is a DP 
    TargetBtn = (Button)UC1.FindName("Btn1"); 
} 

您也可以使用這種方法:

Dynamically changing TargetName,在這裏你應該改變Target特性y而不是TargetName屬性。

0

它只是View的業務。所有用戶界面操作,如動畫,造型應該由View完成。 ViewModel不應該知道關於View。最好爲App.xaml文件中的應用程序創建全新的Button樣式。如果你想使用這種風格的混凝土Button只需使用x:Key屬性。

讓我給個例子:

<Application.Resources> 
    <Style TargetType="Button" x:Key="EventTriggerButton" > 
     <Style.Triggers>    
      <EventTrigger RoutedEvent="Button.Click"> 
       <BeginStoryboard> 
        <Storyboard> 
         <DoubleAnimation Storyboard.TargetName="Studio" Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:2"/> 
         <DoubleAnimation Storyboard.TargetName="Animation" Storyboard.TargetProperty="Opacity" From="0" To="0.3" Duration="0:0:2"/> 
         <DoubleAnimation Storyboard.TargetName="Record" Storyboard.TargetProperty="Opacity" From="0" To="0.3" Duration="0:0:2"/> 
         <DoubleAnimation Storyboard.TargetName="Info" Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:2"/> 
         <DoubleAnimation Storyboard.TargetName="info_content" Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:2"/> 
        </Storyboard> 
       </BeginStoryboard> 
      </EventTrigger>    
     </Style.Triggers> 
    </Style> 
</Application.Resources> 
相關問題