2012-03-20 186 views
0

我需要創建一個彩色動畫。我有一個控制(一個光滑的按鈕 - 最小化,關閉),這是完美的。有一個鼠標懸停觸發器會改變它的顏色。問題是當我想要動畫這個顏色轉換時。 :SSlickButton彩色動畫

這裏有一個例子它的樣子:

<ControlTemplate x:Key="SlickButtonTemplate" TargetType="{x:Type controls:SlickButtonControl}"> 
    <Grid> 
     <Border x:Name="ButtonBackgroundBorder" CornerRadius="{Binding Path=CornerRadius, RelativeSource={RelativeSource TemplatedParent}}" 
       Background="{Binding Path=HighlightBackground, RelativeSource={RelativeSource TemplatedParent}}" Opacity="0" BorderBrush="Black" BorderThickness="1"> 
     </Border> 
     <Border x:Name="ButtonEdgesBorder" CornerRadius="{Binding Path=CornerRadius, RelativeSource={RelativeSource TemplatedParent}}" Opacity="1" BorderBrush="Black" 
       BorderThickness="1"> 
      <Border.BitmapEffect> 
       <DropShadowBitmapEffect Color="#FFFFFFFF" Direction="270" ShadowDepth=".75" Softness="0.20"/> 
      </Border.BitmapEffect> 
     </Border> 
     <Border x:Name="ButtonContentBorder" CornerRadius="{Binding Path=CornerRadius, RelativeSource={RelativeSource TemplatedParent}}" Opacity="1" BorderThickness="1"> 
      <ContentPresenter Width="Auto" Height="Auto" HorizontalAlignment="Center" VerticalAlignment="Center"> 
      </ContentPresenter> 
     </Border> 
    </Grid> 
    <ControlTemplate.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Trigger.Setters> 
       <Setter Property="Opacity" TargetName="ButtonBackgroundBorder" Value="1"></Setter> 
      </Trigger.Setters> 
     </Trigger> 
     <Trigger Property="IsMouseOver" Value="False"> 
      <Trigger.Setters> 
       <Setter Property="Opacity" TargetName="ButtonBackgroundBorder" Value="1"></Setter> 
       <Setter Property="Background" TargetName="ButtonBackgroundBorder" Value="{Binding Path=PressedBackground, RelativeSource={RelativeSource TemplatedParent}}"></Setter> 
      </Trigger.Setters> 
     </Trigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 
<Style x:Key="SlickButton" TargetType="{x:Type ToggleButton}"> 
    <Setter Property="Template" Value="{StaticResource SlickButtonTemplate}" /> 
</Style> 

我試圖刪除Trigger.Setters部分和替換它:

<Trigger.EnterActions> 
       <BeginStoryboard> 
        <Storyboard> 
         <DoubleAnimation BeginTime="00:00:00" Duration="00:00:00.5" Storyboard.TargetName="ButtonBackgroundBorder" 
         Storyboard.TargetProperty="(UIElement.Opacity)" To="1" /> 
        </Storyboard> 
       </BeginStoryboard> 
      </Trigger.EnterActions> 

它工作一次。當鼠標進入按鈕區域時有一個動畫,但當它離開時沒有動畫。接下來,當鼠標再次進入該按鈕時 - 沒有動畫,但顏色立即變化:S我不知道該怎麼做。我懇求一些幫助。 Thx提前。

回答

0

THX,我傻,不評論:P

 <ControlTemplate.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Trigger.EnterActions> 
       <BeginStoryboard> 
        <Storyboard> 
         <DoubleAnimation BeginTime="00:00:00" Duration="00:00:00.5" Storyboard.TargetName="buttonBackgroundOverBorder" 
         Storyboard.TargetProperty="(UIElement.Opacity)" To="1" /> 
        </Storyboard> 
       </BeginStoryboard> 
      </Trigger.EnterActions> 
      <Trigger.ExitActions> 
       <BeginStoryboard> 
        <Storyboard> 
         <DoubleAnimation BeginTime="00:00:00" Duration="00:00:00.5" Storyboard.TargetName="buttonBackgroundOverBorder" 
         Storyboard.TargetProperty="(UIElement.Opacity)" To="0" /> 
        </Storyboard> 
       </BeginStoryboard> 
      </Trigger.ExitActions> 
     </Trigger> 
     <Trigger Property="IsPressed" Value="True"> 
      <Trigger.Setters> 
       <Setter Property="Background" TargetName="buttonBackgroundPressedBorder" Value="{Binding Path=PressedBackground, RelativeSource={RelativeSource TemplatedParent}}" /> 
      </Trigger.Setters> 
      <Trigger.EnterActions> 
       <BeginStoryboard> 
        <Storyboard> 
         <DoubleAnimation BeginTime="00:00:00" Duration="00:00:00.5" Storyboard.TargetName="buttonBackgroundPressedBorder" 
         Storyboard.TargetProperty="(UIElement.Opacity)" To="1" /> 
        </Storyboard> 
       </BeginStoryboard> 
      </Trigger.EnterActions> 
      <Trigger.ExitActions> 
       <BeginStoryboard> 
        <Storyboard> 
         <DoubleAnimation BeginTime="00:00:00" Duration="00:00:00.5" Storyboard.TargetName="buttonBackgroundPressedBorder" 
         Storyboard.TargetProperty="(UIElement.Opacity)" To="0" /> 
        </Storyboard> 
       </BeginStoryboard> 
      </Trigger.ExitActions> 
     </Trigger> 
    </ControlTemplate.Triggers> 

一切工作正常:)

+0

我不知道你是否愚蠢:)但xaml會成長在你身上,只要把你的ti我,否則只是問。 – Silvermind 2012-03-21 18:30:57

1

不在這裏
<Trigger Property="IsMouseOver" Value="False">

不在這裏
<Trigger.Setters>

但這裏
<Setter Property="Opacity" TargetName="ButtonBackgroundBorder" Value="1"></Setter>

應該是:
<Setter Property="Opacity" TargetName="ButtonBackgroundBorder" Value="0"></Setter>

順便說一句,我認爲你有Property="IsMouseOver" Value="False"混淆Property="IsPressed" Value="True"

,目前仍是OpacityButtonBackgroundBorderIsMouseOver=false應該0