WPF. Manière la plus facile de déplacer l'Image de (X,Y) par programmation?
Personne ne sait d'une manière facile à animer d'un mouvement à partir d'une Image de l'emplacement actuel vers un nouvel emplacement (X,Y) à l'aide de WPF animation sans XAML, 100% par programmation? Et sans référence à "ce" (avec RegisterName etc).
Je suis en train de faire une extension de la classe de l'Image pour faire de l'animation des trucs sur elle. Il est assez facile de modifier la largeur et la hauteur de propriétés à travers l'animation, mais après la recherche de l'emplacement de l'animation d'un objet, il devient tout à coup plus avancé.
Que c'est une extension de la classe, je vais seulement avoir une référence à l'Image réelle de l'objet et le X et le Y, je veux le déplacer.
public static void MoveTo(this Image targetControl, double X, double Y, double Width, double Height){
//code here
...
}
Mise à jour:
Grâce. Près de de travail. Il semble que Le GetTop et GetLeft renvoie 'NaN' pas explicitement définie. Trouvé la solution dans ce post: Toile.GetTop() pour retourner NaN
public static void MoveTo(this Image target, double newX, double newY) {
Vector offset = VisualTreeHelper.GetOffset(target);
var top = offset.Y;
var left = offset.X;
TranslateTransform trans = new TranslateTransform();
target.RenderTransform = trans;
DoubleAnimation anim1 = new DoubleAnimation(0, newY - top, TimeSpan.FromSeconds(10));
DoubleAnimation anim2 = new DoubleAnimation(0, newX - left, TimeSpan.FromSeconds(10));
trans.BeginAnimation(TranslateTransform.YProperty, anim1);
trans.BeginAnimation(TranslateTransform.XProperty, anim2);
}
J'ai eu à échanger deux valeurs (DE) avec 0. Je suppose que ce doit être parce que, dans ce contexte, le coin supérieur gauche de l'image est à l'origine? Mais maintenant ça fonctionne.
Mise à jour de votre code fonctionne vraiment sympa ! Merci beaucoup pour votre excellence !
OriginalL'auteur Wolf5 | 2010-11-18
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:
Près de de travail. Les propriétés left et top a dû être obtenir de VisualTreeHelper.GetOffset(cible) plutôt que GetTop et GetLeft retourné 'NaN'. Un seul bug à gauche. Le début de l'animation semble commencer à le double de la situation actuelle.
0 comme valeur fixe.
suis d'erreur près de méthode moveto..
j'ai besoin terminé extrait de code
OriginalL'auteur Dean Chalk
Ici, c'est... Ça change de la taille et se déplace d'une
MediaElement
en vertu de laCanvas
. Il suffit de saisir vos paramètres:Mise à JOUR:
Au lieu de
MediaElement
utiliser cette ligne:Et n'oubliez pas de mettre le code C#:
Vous pouvez utiliser
MediaElement
en tant que bien, mais vous devez définir unVideoClip
de voir quelque chose 😉Oui, c'est fait. Vérifier ma réponse. N'oubliez pas de voter...
Je suis devenu un peu mieux à WPF animations dans les derniers jours. Essayez à nouveau quand je rentre à la maison.
Remplacement de MediaElement avec un Rectangle fait le rect déplacer, mais il n'a pas agi comme un sprite se déplace à travers l'écran, au lieu de cela il a fait un agrandissement (et plus grands) rectangle situé dans le coin inférieur droit de l'écran. Pas exactement l'animation prévu à partir de la question posée, je pense que c'est les valeurs codées en dur dans le code C#. J'-voté parce que je sais répondre aux questions n'est pas facile, et vous vous souciez assez pour mettre à jour vos réponses.
Je suis à la prise de contrôle d'INTERFACE utilisateur plus petites avec votre code. Il fonctionne très bien mais comment faire pour le faire revenir à la taille précédente? J'ai testé le souhaitez .Largeur= 111 et .Hauteur= 222, mais ne fonctionne pas...
OriginalL'auteur Academy of Programmer
Ce code est basé sur @DeanChalk de réponse.
Il déplace un
Image
contenues dans unCanvas
(RFID_Token
) en diagonale à partir du haut à droite vers le bas-gauche, placé en position centrale sur un autreImage
dans unCanvas
(RFID_Reader
).OriginalL'auteur Danny Beckett
J'ai continué à avoir NaN ou des valeurs à 0 pour ma éléments imbriqués, voici une version modifiée de Danny réponse :
OriginalL'auteur Akli
S'il vous plaît trouver une solution qui utilise les propriétés Left et Top de Toile pour la méthode d'extension. Voir le code suivant:
OriginalL'auteur laserman