2011-05-05 3 views
1

단추를 반으로 스타일을 지정하고 손으로 반으로 스타일을 지정하면 단추를 한 번 클릭하면 나올 때까지 "누른 상태"로 유지됩니다 다른 버튼을 클릭하십시오. MouseOver 잘 작동하지만. 그것을 고치는 방법에 대한 아이디어?WPF 스타일이 적용된 단추가 클릭 된 후에 기본값으로 재설정되지 않습니다.

<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

+0

그러면 약간의 문제가 해결되지만 단추는 여전히 축소되어 있으며 outerRectangle은 여전히 ​​HighlightBrushKey의 색입니다. 기본적으로, 내 질문은 것 : 트리거 "false"때 스토리 보드 "실행 취소"방법? –

+0

@ CodeNaked : 네 말이 맞아, 나는 그 대답에 적응할 것이다. –

0

이 때문에 isfocused이다. 버튼을 클릭하면 포커스를 얻습니다. 그래서 집중된 방아쇠가 작동합니다. 초점이나 탭을 다른 컨트롤로 옮기면 괜찮을 것입니다.

관련 문제