2015-02-08 5 views
1

Я пытаюсь создать собственный стиль для кисти со стеклянным видом. У меня это выглядит так, как я этого хочу, но я не могу заставить поведение Pressed работать.Смена кистей в VisualStateManager

Превосходный внешний вид выглядит просто обычным образом, когда одна из кистей перевернута. Я установил обе кисти в качестве ресурсов и попробовал ObjectAnimationUsingKeyFrames, но, похоже, это не так. Идея что-то вдоль линий этого:

<VisualState x:Name="Pressed"> 
    <Storyboard> 
     <!-- swap the brush from {StaticResource ButtonGlassBrushNormal} to 
      {StaticResource ButtonGlassBrushPressed --> 
    </Storyboard> 
</VisualState> 

Вот мои ресурсы и стиль:

<LinearGradientBrush x:Key="ButtonGlassBrushNormal" EndPoint="0.5,1" StartPoint="0.5,0"> 
    <GradientStop Color="#00000000" Offset="0.31"/> 
    <GradientStop Color="White"/> 
</LinearGradientBrush> 
<LinearGradientBrush x:Key="ButtonGlassBrushPressed" EndPoint="0.5,0" StartPoint="0.5,1"> 
    <GradientStop Color="White"/> 
    <GradientStop Color="#00000000" Offset="0.31"/> 
</LinearGradientBrush> 
<ControlTemplate x:Key="ButtonControlTemplate1" TargetType="{x:Type Button}"> 
    <Grid> 
     <VisualStateManager.VisualStateGroups> 
      <VisualStateGroup x:Name="CommonStates"> 
       <VisualState x:Name="Normal" /> 
       <VisualState x:Name="Pressed"> 
        <Storyboard> 
         <ObjectAnimationUsingKeyFrames 
          Storyboard.TargetName="_glassBorder" 
          Storyboard.TargetProperty="Background" 
          Duration="0:0:1" 
          RepeatBehavior="Forever"> 
          <ObjectAnimationUsingKeyFrames.KeyFrames> 
           <DiscreteObjectKeyFrame KeyTime="0:0:1" Value="{StaticResource ButtonGlassBrushPressed}" /> 
          </ObjectAnimationUsingKeyFrames.KeyFrames> 
         </ObjectAnimationUsingKeyFrames> 
        </Storyboard> 
       </VisualState> 
      </VisualStateGroup> 
     </VisualStateManager.VisualStateGroups> 
     <Border BorderBrush="Black" BorderThickness="1" HorizontalAlignment="Left" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" VerticalAlignment="Top" Margin="0,0,0,-21.167" CornerRadius="5"> 
      <Border.Background> 
       <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
        <GradientStop Color="Black" Offset="0"/> 
        <GradientStop Color="#FF803A3A" Offset="1"/> 
       </LinearGradientBrush> 
      </Border.Background> 
      <Border BorderThickness="1" CornerRadius="5" x:Name="_glassBorder" Background="{StaticResource ButtonGlassBrushNormal}"> 
       <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/> 
      </Border> 
     </Border> 
    </Grid> 
</ControlTemplate> 

Я предполагаю, что это будет голова slappingly простой, но то, что я здесь делаю неправильно ?

ответ

2

Не устанавливайте продолжительность на раскадровке и, возможно, ноль KeyTime. Кроме того, вы также должны объявить состояние MouseOver, иначе прессованная состояние будет сохраняться до тех пор, мышь не оставляет кнопки:

<VisualStateGroup x:Name="CommonStates"> 
    <VisualState x:Name="Normal"/> 
    <VisualState x:Name="MouseOver"/> 
    <VisualState x:Name="Disabled"/> 
    <VisualState x:Name="Pressed"> 
     <Storyboard> 
      <ObjectAnimationUsingKeyFrames 
       Storyboard.TargetName="_glassBorder" 
       Storyboard.TargetProperty="Background"> 
       <ObjectAnimationUsingKeyFrames.KeyFrames> 
        <DiscreteObjectKeyFrame KeyTime="0:0:0" 
         Value="{StaticResource ButtonGlassBrushPressed}"/> 
       </ObjectAnimationUsingKeyFrames.KeyFrames> 
      </ObjectAnimationUsingKeyFrames> 
     </Storyboard> 
    </VisualState> 
</VisualStateGroup> 
+0

Это была продолжительность и нулевое ключевое время. Благодаря! –

0

Вот так, вы должны сделать, если вы не заботитесь о анимации (как я):

<VisualState x:Name="Pressed"> 
     <Storyboard> 
      <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="_glassBorder"> 
        <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ButtonGlassBrushPressed}"/> 
      </ObjectAnimationUsingKeyFrames> 
     </Storyboard> 
</VisualState>