2010-12-17 4 views
0

Celui-ci m'a bloqué. J'ai donc l'exemple d'application suivant qui est censé animer l'opacité d'un élément de bordure lorsque la souris pointe dessus. `VisualStateManager.GoToState retourne toujours faux

<UserControl.Resources> 
    <Style x:Key="borderstyle" TargetType="ContentControl"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ContentControl"> 
        <Grid> 

         <VisualStateManager.VisualStateGroups> 

          <VisualStateGroup> 
           <VisualState x:Name="FirstState"> 
            <Storyboard> 
             <DoubleAnimation To="1.0" Storyboard.TargetName="border" Storyboard.TargetProperty="Opacity" FillBehavior="HoldEnd"/> 
            </Storyboard> 
           </VisualState> 
          </VisualStateGroup> 

         </VisualStateManager.VisualStateGroups> 

         <Border Background="Blue" x:Name="border" Opacity="0.0"/> 

        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 

    </Style> 
</UserControl.Resources> 


<Grid x:Name="LayoutRoot" Background="White"> 
    <Border BorderBrush="Red" BorderThickness="1" Width="51" Height="51"> 
     <ContentControl Width="50" Height="50" Style="{StaticResource borderstyle}" MouseEnter="OnMouseEntered" /> 
    </Border> 
</Grid> 

`

Et dans le code derrière je le code suivant ...

private void OnMouseEntered(object sender, MouseEventArgs e) 
    { 
     bool status = VisualStateManager.GoToState(this, "FirstState", true); 
    } 

Et ... rien ne se passe. Le statut est toujours faux et l'animation ne se déclenche jamais.

Je ne suis pas sûr de ce qui manque ici.

Répondre

3

Vous devez indiquer votre ContentControl que le contrôle quel état est en train de changer:

private void OnMouseEntered(object sender, MouseEventArgs e) 
{ 
    bool status = VisualStateManager.GoToState((ContentControl)sender, "FirstState", false); 
} 
+0

Wow ... merci, ça fonctionne parfaitement, je pense que j'étais perplexe parce que je construis habituellement des contrôles personnalisés et de passer "ça" fonctionne très bien. ious maintenant :) Merci – Senkwe

1

Ajouter ApplyTemplate() à votre commande (nécessaire lorsque lorsque le contrôle est dynamique (programatically) ajouté

1

Utilisez VisualStateManager pour les transitions d'état. à tout moment dans ou après la page Loader gestionnaire d'événements

Questions connexes