Question

J'essaie de définir la couleur d'arrière-plan d'un contrôle lorsque la souris est dessus. J'essaie de le faire via le gestionnaire de l'état visuel. Je suis en mesure d'obtenir le code suivant en cours d'exécution:

<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Control.Background" Storyboard.TargetName="BorderBackground">
    <DiscreteObjectKeyFrame KeyTime="0">
        <DiscreteObjectKeyFrame.Value>
            <SolidColorBrush Color="#FF123456" />
        </DiscreteObjectKeyFrame.Value>
    </DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>

Mais je ne veux pas définir la couleur dans le modèle, mais le lier à une valeur du contrôle. Je l'ai essayé avec le « Tag'-propriété de la manière suivante:

<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Control.Background" Storyboard.TargetName="BorderBackground">
    <DiscreteObjectKeyFrame KeyTime="0">
        <DiscreteObjectKeyFrame.Value>
            <SolidColorBrush Color="{TemplateBinding Tag}" />
        </DiscreteObjectKeyFrame.Value>
    </DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>

et la configuration du numéro-propriété du contrôle qui utilise ce style « # FF123456 ».

Mais cela ne fonctionne pas. Il ne me laisse pas un message d'erreur, il ne change pas simplement le backgroundcolor. Tout le monde sait, ce pourrait être le problème?

Merci à l'avance,
Frank

Était-ce utile?

La solution

Malheureusement, la façon dont vous essayez de le faire ne fonctionnera pas dans Silverlight. Les animations VisualStateManager ne font pas partie de l'arbre d'affichage, de sorte que vous ne pouvez pas utiliser la liaison. Vous avez des options bien, StaticResources (alias installent des couleurs dans le dictionnaire des ressources) et des animations à base de code sont différentes solutions de contournement (en fonction exactement ce que vous voulez faire). Pour ce dernier départ un fil où j'ai posé une question similaire: Comment puis-je animer une propriété dynamique dans Silverlight 4 UserControl

Autres conseils

Vous ne pouvez pas le faire de manière dynamique sur une seule cible, mais ce que vous pouvez faire est de créer une autre cible (par exemple appelé BorderBackgroundAlt) dont le fond, vous pouvez définir explicitement à {TemplateBinding Tag} dans sa déclaration.

Ensuite, vous pouvez avoir BorderBackgroundAlt réduit par défaut, et dans votre cadre d'animation au lieu de couleurs de commutation, visibilités de commutation, de sorte que BorderBackground est effondré et BorderBackgroundAlt est visible.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top