2012-03-20 179 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