1

Я работаю над проектом Windows Phone 8. Моя проблема с этой кнопкой:Анимация для нажатой кнопки VisualState не срабатывает

 <Button x:Name="decreaseFontButton" Foreground="{StaticResource GlobalBrush}"> 
      <VisualStateManager.VisualStateGroups> 
       <VisualStateGroup x:Name="CommonStates"> 
        <VisualState x:Name="Pressed"> 
         <Storyboard> 
          <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Height" Storyboard.TargetName="decreaseFontButton"> 
           <DiscreteObjectKeyFrame KeyTime="0" Value="70"/> 
          </ObjectAnimationUsingKeyFrames> 
          <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="decreaseFontButton" Completed="ObjectAnimationUsingKeyFrames_Completed_1"> 
           <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource GlobalBrush}"/> 
          </ObjectAnimationUsingKeyFrames> 
         </Storyboard> 
        </VisualState> 
       </VisualStateGroup> 
      </VisualStateManager.VisualStateGroups> 
      <Button.Content> 
       <Image Source="/Assets/Player/sub_minus.png" Width="28" Height="28"/> 
      </Button.Content> 
     </Button> 

что ни одна из двух анимаций не срабатывает. Я попытался изменить имя VisualStateGroup на FocusState и имя VisualState до Сфокусировано, но я не видел никаких изменений. Не могли бы вы рассказать мне, что я делаю неправильно?

Я ценю ваше внимание!

+1

Там нет ничего плохого в раскадровку, просто, как вы пытаетесь вызвать его. Это просто нужно сделать шаблоном управления и объявить ресурс. Я бы предложил посмотреть шаблон кнопки по умолчанию и как он использует VisualStateManager, если это не очень быстро показывает ваш ответ, мы можем показать вам, что вам не хватает, но вы не за горами. –

+0

Большое спасибо за ваши усилия, я уже сделал это, визуальный результат стал таким, как ожидалось, но я до сих пор не понял, почему первоначальное решение не очень хорошо. –

+1

Просто потому, что VisualStateManager не может быть применен непосредственно к UIElement, просто должен быть в шаблоне управления для UIElement TargetType. Ничего страшного, рад, что ты нашел свое средство. Cheers :) –

ответ

1

Проблема в том, как вы пытаетесь изменить визуальные состояния. Они фактически являются частью внутреннего шаблона кнопки и не настраиваются так, как вы пытаетесь.

Вместо этого вы должны искать новый стиль, который включает изменения визуального состояния, которые вы хотите, и они применяют этот стиль к кнопке.

Как это:

<phone:PhoneApplicationPage.Resources> 

    <SolidColorBrush Color="Aqua" x:Key="aquabrush" /> 

    <Style x:Key="AlternativeButtonStyle" TargetType="Button"> 
     <Setter Property="Background" Value="Transparent"/> 
     <Setter Property="BorderBrush" Value="{StaticResource PhoneForegroundBrush}"/> 
     <Setter Property="Foreground" Value="{StaticResource PhoneForegroundBrush}"/> 
     <Setter Property="BorderThickness" Value="{StaticResource PhoneBorderThickness}"/> 
     <Setter Property="FontFamily" Value="{StaticResource PhoneFontFamilySemiBold}"/> 
     <Setter Property="FontSize" Value="{StaticResource PhoneFontSizeMedium}"/> 
     <Setter Property="Padding" Value="10,5,10,6"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="Button"> 
        <Grid Background="Transparent"> 
         <VisualStateManager.VisualStateGroups> 
          <VisualStateGroup x:Name="CommonStates"> 
           <VisualState x:Name="Normal"/> 
           <VisualState x:Name="MouseOver"/> 
           <VisualState x:Name="Pressed"> 
            <Storyboard> 
             <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="ButtonBackground"> 
              <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource aquabrush}"/> 
             </ObjectAnimationUsingKeyFrames> 
             <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Height" Storyboard.TargetName="ButtonBackground"> 
              <DiscreteObjectKeyFrame KeyTime="0" Value="70"/> 
             </ObjectAnimationUsingKeyFrames> 
            </Storyboard> 
           </VisualState> 
           <VisualState x:Name="Disabled" /> 
          </VisualStateGroup> 
          <VisualStateGroup x:Name="FocusStates"/> 
         </VisualStateManager.VisualStateGroups> 
         <Border x:Name="ButtonBackground" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" CornerRadius="0" Margin="{StaticResource PhoneTouchTargetOverhang}"> 
          <ContentControl x:Name="ContentContainer" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Padding="{TemplateBinding Padding}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/> 
         </Border> 
        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</phone:PhoneApplicationPage.Resources> 

<Grid x:Name="LayoutRoot" Background="Transparent"> 
    <Button Content="pressed?" Style="{StaticResource AlternativeButtonStyle}" /> 
</Grid> 
Смежные вопросы