7
votes

Animate Marge Change de Silverlight

J'animage une frontière redimensionner dans Silverlight mais j'ai également besoin de supprimer progressivement la marge autour de celle-ci (actuellement 50). Blend ne semble pas générer une Tween pour le changement de marge - il saute juste de 50 à 0 en une fois. Y a-t-il un moyen d'y parvenir?


0 commentaires

3 Réponses :


8
votes

Le problème est que une marge est vraiment de type "System.Windows.Thickness" qui n'est pas un objet de dépendance, donc laissé, le haut, le haut et le bas ne sont pas des propriétés de dépendance et ne peuvent donc pas être animées à l'aide de doubleinimation (ce qui permet pour Tweening).

Qu'est-ce qui est utilisé pour animer la marge est une objectivation qui ne touche pas. C'est pourquoi vous voyez la marge Saut de son emplacement d'origine à son nouvel emplacement. Comme un autre exemple commun, la même chose se produit lorsque vous essayez d'animer la propriété de visibilité entre visible et effondré.

Vous devez soit avoir besoin d'une animation de minuterie afin d'animer la marge ou de mettre en œuvre votre propre type d'animation pour des objets d'épaisseur.


0 commentaires

3
votes

0
votes

Voici une version mise à jour que Vous permet d'animer à partir de XAML

<VisualStateManager.VisualStateGroups>
    <VisualStateGroup x:Name="Positions">
        <VisualStateGroup.Transitions>
            <VisualTransition GeneratedDuration="0:0:0.2"/>
        </VisualStateGroup.Transitions>
        <VisualState x:Name="Left">                    
            <Storyboard>
                <DoubleAnimation Duration="0:0:0.3" NiceCards:ThicknessAnimationX.To="0,0,0,0" NiceCards:ThicknessAnimationX.Element="{Binding ElementName=rectangle1}" Storyboard.TargetName="rectangle1" Storyboard.TargetProperty="Opacity"/>
            </Storyboard>                       
        </VisualState>
        <VisualState x:Name="Right">                    
            <Storyboard>
                <DoubleAnimation Duration="0:0:0.3" NiceCards:ThicknessAnimationX.To="0,200,0,0" NiceCards:ThicknessAnimationX.Element="{Binding ElementName=rectangle1}" Storyboard.TargetName="rectangle1" Storyboard.TargetProperty="Opacity"/>
            </Storyboard>                    
        </VisualState>
    </VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Rectangle Height="100" HorizontalAlignment="Left" Margin="23,25,0,0" x:Name="rectangle1" Stroke="Black" StrokeThickness="1" VerticalAlignment="Top" Width="200" Fill="#FF1BAA00"/>


1 commentaires

J'ai essayé d'utiliser cela dans XAML selon votre exemple et je reçois un flux d'erreurs dans SL5. J'ai ajouté un xmlns: somename déclaration, mais il semble que le XAML ne sait pas ce qu'est un nom Somename: l'épaisseuranimationx propriété est.