2011-05-05 44 views
1

我使用Expression Blend和一半手动设置了按钮的一半,除了点击一个按钮之后,它仍然处于“按下”状态,直到我点击另一个按钮。 MouseOver工作正常。任何想法如何解决它?WPF Styled按钮在点击后没有重置为默认设置

<Style x:Key="ButtonShrinkStyle" TargetType="{x:Type Button}"> 
    <Setter Property="FontSize" Value="42" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Button}"> 
       <ControlTemplate.Resources> 
        <Storyboard x:Key="OnMouseEnter1"> 
         <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" Storyboard.TargetName="glassCube"> 
          <EasingDoubleKeyFrame KeyTime="0" Value="1"/> 
          <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="0.9"/> 
         </DoubleAnimationUsingKeyFrames> 
         <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)" Storyboard.TargetName="glassCube"> 
          <EasingDoubleKeyFrame KeyTime="0" Value="1"/> 
          <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="0.9"/> 
         </DoubleAnimationUsingKeyFrames> 
         <PointAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransformOrigin)" Storyboard.TargetName="outerRectangle"> 
          <EasingPointKeyFrame KeyTime="0" Value="0,0"/> 
          <EasingPointKeyFrame KeyTime="0:0:0.3" Value="0.5,0.5"/> 
         </PointAnimationUsingKeyFrames> 
         <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" Storyboard.TargetName="outerRectangle"> 
          <EasingDoubleKeyFrame KeyTime="0" Value="1"/> 
          <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="0.9"/> 
         </DoubleAnimationUsingKeyFrames> 
         <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)" Storyboard.TargetName="outerRectangle"> 
          <EasingDoubleKeyFrame KeyTime="0" Value="1"/> 
          <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="0.9"/> 
         </DoubleAnimationUsingKeyFrames> 
         <PointAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransformOrigin)" Storyboard.TargetName="innerRectangle"> 
          <EasingPointKeyFrame KeyTime="0" Value="0,0"/> 
          <EasingPointKeyFrame KeyTime="0:0:0.3" Value="0.5,0.5"/> 
         </PointAnimationUsingKeyFrames> 
         <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" Storyboard.TargetName="innerRectangle"> 
          <EasingDoubleKeyFrame KeyTime="0" Value="1"/> 
          <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="0.9"/> 
         </DoubleAnimationUsingKeyFrames> 
         <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)" Storyboard.TargetName="innerRectangle"> 
          <EasingDoubleKeyFrame KeyTime="0" Value="1"/> 
          <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="0.9"/> 
         </DoubleAnimationUsingKeyFrames> 
        </Storyboard> 
       </ControlTemplate.Resources> 
       <Grid> 
        <Rectangle x:Name="outerRectangle" Fill="Transparent" RadiusY="20" RadiusX="20" Stroke="GhostWhite" StrokeThickness="5"> 
         <Rectangle.RenderTransform> 
          <TransformGroup> 
           <ScaleTransform/> 
           <SkewTransform/> 
           <RotateTransform/> 
           <TranslateTransform/> 
          </TransformGroup> 
         </Rectangle.RenderTransform> 
        </Rectangle> 
        <Rectangle x:Name="innerRectangle" Fill="{TemplateBinding Background}" Margin="12" RadiusY="20" RadiusX="20" Stroke="Transparent" StrokeThickness="5"> 
         <Rectangle.RenderTransform> 
          <TransformGroup> 
           <ScaleTransform/> 
           <SkewTransform/> 
           <RotateTransform/> 
           <TranslateTransform/> 
          </TransformGroup> 
         </Rectangle.RenderTransform> 
        </Rectangle> 
        <ContentPresenter x:Name="myContentPresenter" 
              HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
              RecognizesAccessKey="True" 
              SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" 
              VerticalAlignment="{TemplateBinding VerticalContentAlignment}"> 
         <ContentPresenter.RenderTransform> 
          <TransformGroup> 
           <ScaleTransform/> 
           <SkewTransform/> 
           <RotateTransform/> 
           <TranslateTransform/> 
          </TransformGroup> 
         </ContentPresenter.RenderTransform> 
        </ContentPresenter> 
        <Rectangle x:Name="glassCube" RadiusY="10" RadiusX="10" Stroke="{TemplateBinding Background}" StrokeThickness="5" Opacity="0" RenderTransformOrigin="0.5,0.5"> 
         <Rectangle.RenderTransform> 
          <TransformGroup> 
           <ScaleTransform/> 
           <SkewTransform/> 
           <RotateTransform/> 
           <TranslateTransform/> 
          </TransformGroup> 
         </Rectangle.RenderTransform> 
         <Rectangle.Fill> 
          <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
           <GradientStop Color="White" Offset="0"/> 
           <GradientStop Color="Transparent" Offset="0.2"/> 
           <GradientStop Color="White" Offset="0.4"/> 
           <GradientStop Color="Transparent" Offset="0.6"/> 
           <GradientStop Color="White" Offset="0.8"/> 
           <GradientStop Color="Transparent" Offset="1"/> 
          </LinearGradientBrush> 
         </Rectangle.Fill> 
        </Rectangle> 
       </Grid> 
       <ControlTemplate.Triggers> 
        <EventTrigger RoutedEvent="Mouse.MouseEnter"> 
         <BeginStoryboard Storyboard="{StaticResource OnMouseEnter1}"/> 
        </EventTrigger> 
        <Trigger Property="IsCancel" Value="False"/> 
        <Trigger Property="IsFocused" Value="True"> 
         <Setter Property="Opacity" TargetName="glassCube" Value="1"/> 
         <Setter Property="Stroke" TargetName="outerRectangle" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> 
         <Setter Property="Stroke" TargetName="glassCube" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> 
        </Trigger> 
        <Trigger Property="IsFocused" Value="False"> 
         <Setter Property="Opacity" TargetName="glassCube" Value="0"/> 
         <Setter Property="Stroke" TargetName="outerRectangle" Value="GhostWhite"/> 
         <Setter Property="Stroke" TargetName="glassCube" Value="GhostWhite"/> 
        </Trigger> 
        <Trigger Property="IsDefaulted" Value="True"/> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter Property="Opacity" TargetName="glassCube" Value="1"/> 
         <Setter Property="Stroke" TargetName="outerRectangle" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> 
         <Setter Property="Stroke" TargetName="glassCube" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> 
         <Setter Property="Effect" TargetName="myContentPresenter"> 
          <Setter.Value> 
           <BlurEffect Radius="1"/> 
          </Setter.Value> 
         </Setter> 
        </Trigger> 
        <Trigger Property="IsMouseOver" Value="False"> 
         <Setter Property="Opacity" TargetName="glassCube" Value="0"/> 
         <Setter Property="Stroke" TargetName="outerRectangle" Value="GhostWhite"/> 
         <Setter Property="Stroke" TargetName="glassCube" Value="GhostWhite"/> 
         <Setter Property="Effect" TargetName="myContentPresenter"> 
          <Setter.Value> 
           <BlurEffect Radius="0"/> 
          </Setter.Value> 
         </Setter> 
        </Trigger> 
        <Trigger Property="IsPressed" Value="True"> 
         <Setter Property="Opacity" TargetName="glassCube" Value="0.7"/> 
        </Trigger> 
        <MultiTrigger> 
         <MultiTrigger.Conditions> 
          <Condition Property="IsPressed" Value="False" /> 
          <Condition Property="IsMouseOver" Value="False" /> 
         </MultiTrigger.Conditions> 
         <Setter Property="Opacity" TargetName="glassCube" Value="0"/> 
        </MultiTrigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

回答

2

当鼠标离开按钮时,MouseEnter事件中的动画不会反转。

创建一个将反转MouseEnter动画的动作并将其应用于MouseOut事件的动画。

相关答案/例如:Here

+1

当IsPressed设置为false时,第一个触发器的值将自动取消应用。你不需要手动“重置”它们。 – CodeNaked 2011-05-05 12:52:13

+0

解决了一些问题,但按钮仍然缩小,而outerRectangle仍然是HighlightBrushKey的颜色。基本上,我想我的问题是:如何在触发器错误时“撤消”故事板? – 2011-05-05 12:53:25

+0

@CodeNaked:你是对的,我会修改答案。 – 2011-05-05 12:59:48

0

这是因为isfocused。如果你点击按钮,它将获得焦点。所以你的重点触发器将工作。如果你将焦点或标签移动到其他控件上,它就可以。

<Trigger Property="IsFocused" 
           Value="True"> 
          <Setter Property="Opacity" 
            TargetName="glassCube" 
            Value="1" /> 
          <Setter Property="Stroke" 
            TargetName="outerRectangle" 
            Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" /> 
          <Setter Property="Stroke" 
            TargetName="glassCube" 
            Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" /> 
         </Trigger>