2011-05-05 30 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> 
相關問題