2012-09-06 49 views
0

我想動畫按鈕陰影效果的顏色,當鼠標進入邊界。 我試試這個代碼,並不適合我。 我不知道問題在哪裏?Silverlight動畫風格從資源文件

<Style x:Name="HeaderButton" TargetType="Button"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="Button"> 
       <Border x:Name="Border" BorderBrush="#FF550211" BorderThickness="0" CornerRadius="4"> 
        <Border.Triggers> 
         <EventTrigger RoutedEvent="Border.MouseEnter"> 
          <BeginStoryboard> 
           <Storyboard> 
            <ColorAnimation Storyboard.TargetProperty="Color" Storyboard.TargetName="MenuButtonShadow" 
                From="#FFFFFFFF" To="#FF000000" Duration="0:0:0.3"></ColorAnimation> 
           </Storyboard> 
          </BeginStoryboard> 
         </EventTrigger> 
        </Border.Triggers> 
        <Border.Background> 
         <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
          <GradientStop Color="#FFAF1232" Offset="0" /> 
          <GradientStop Color="#FFB60329" Offset="1" /> 
         </LinearGradientBrush> 
        </Border.Background> 
        <ContentPresenter Margin="8, 0" VerticalAlignment="Center" HorizontalAlignment="Center" /> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="Effect"> 
     <Setter.Value> 
      <DropShadowEffect x:Name="MenuButtonShadow" ShadowDepth="0" BlurRadius="4"></DropShadowEffect> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="Foreground" Value="White"></Setter> 
    <Setter Property="Margin" Value="4"></Setter> 
</Style> 

回答

1

MSDN

在Silverlight中,你可以使用一個EventTrigger的唯一事件是Loaded事件。對於其他事件,您應該聲明的資源屬性情節串連圖板,提供故事板一個名稱值,編寫事件處理程序調用上的命名故事板Begin方法。

我想你可以做這樣的事情在你的XAML(雖然我沒有測試過):

<Storyboard x:Name="MenuButtonShadowStoryboard"> 
    <ColorAnimation Storyboard.TargetProperty="Color" Storyboard.TargetName="MenuButtonShadow" 
        From="#FFFFFFFF" To="#FF000000" Duration="0:0:0.3"> 
    </ColorAnimation> 
</Storyboard> 

<ControlTemplate TargetType="Button"> 
    <Border x:Name="Border" MouseEnter="Border_MouseEnter"> 
     <!-- omitted for brevity --> 
    </Border> 
</ControlTemplate> 

然後你的事件處理程序調用上的故事板Begin方法:

private void Border_MouseEnter(object sender, MouseEventArgs e) 
{ 
    MenuButtonShadowStoryboard.Begin(); 
} 

您可能想爲MouseLeave事件添加類似的內容,這會使顏色回到#FFFFFFFF。

+0

你好,謝謝安德魯。你能告訴我如何開始在資源文件中的故事板? –

+0

哎呀,我的解決方案假定您有一個代碼隱藏文件,但你的問題的標題清楚地表明,你的代碼是一個資源文件。抱歉!也許你可以創建一個名爲FancyBorder的新UserControl,它包含你在ControlTemplate中定義的邊界。在UserControl.Resources中定義Storyboard,並將事件處理程序放入新的UserControl的代碼隱藏中。然後在你的資源文件,'<控件模板>'。 ContentPresenter不再是Border的子項,但我認爲它仍然看起來一樣。希望有所幫助! – Andrew

+0

考慮其他的選擇可能是使用[行爲/觸發】(http://www.silverlightshow.net/items/Behaviors-and-Triggers-in-Silverlight-3.aspx),或[VisualStateManager(HTTP ://msdn.microsoft.com/en-us/library/cc278064(v = VS.95)的.aspx#defining_the_visual_structure_and_visual_behavior_of_a_control_in_a_controltemplate)。 – Andrew