2016-01-18 63 views
0

我有,我希望定義一個Storyboard動畫按鈕模板(正確;現在它的對象後面的代碼完成,但我想放棄這一點,做直XAML)如何在XAML中的模板上定義故事板和動畫?

鑑於以下存根:

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:sys="clr-namespace:System;assembly=mscorlib" 
    xmlns:FooBar="clr-namespace:Foo.Bar"> 
    <Style TargetType="{x:Type FooBar.MyButton}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="Button"> 
        <Border x:Name="Border"/> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</ResourceDictionary> 

我會在哪裏放這個故事板?

<Storyboard x:Key="SBOpac"> 
    <DoubleAnimation 
     Storyboard.TargetName="Border" 
     Storyboard.TargetProperty="Opacity" 
     From="0" To="1" Duration="0:0:0.3"/> 
</Storyboard> 

我已經試用過ControlTemplate.ResourcesBorder.Resources但在這兩種情況下,我得到這個異常:

((MyButton.Template.FindName("Border", GB) as Border) 
     .Resources["SBOpac"] as Storyboard) 
     .Begin(MyButton, true); 

enter image description here

在這裏,我試圖在後面的代碼開始故事板

回答

2

只要觸發動畫,您應該將您的故事情節放入ControlTemplate內:

<Style TargetType="{x:Type Button}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="Button"> 
        <ControlTemplate.Triggers> 
         <EventTrigger RoutedEvent="MouseEnter"> 
          <BeginStoryboard> 
           <Storyboard > 
            <DoubleAnimation 
             Storyboard.TargetName="Border" 
             Storyboard.TargetProperty="Opacity" 
             From="0" To="1" Duration="0:0:0.3"/> 
           </Storyboard> 
          </BeginStoryboard> 
         </EventTrigger> 
        </ControlTemplate.Triggers> 
        <Border x:Name="Border" Background="Black"/> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 

    </Style> 
+0

好的,謝謝。現在,如果我想讓故事板觸發其他用戶事件,而不僅僅是鼠標進入,我該怎麼辦?例如,如果按鈕具有可以設置爲True或False的自定義屬性,那麼我將如何製作它以便Storyboard在True時播放,並在False時停止播放? – Will

+1

在這種情況下,只需使用指向該屬性的DataTrigger而不是EventTrigger,並將StoryBoard放入EnterActions中,類似於 ..... – Usama

+0

非常感謝您的幫助。我會在明天嘗試實施它。 – Will