Fondamentalement, je veux faire des tas de formes et les faire animation. Donc, je suis venu avec la classe personnalisée suivante: Cependant, lorsque j'essaie de faire une instance de la classe et de l'ajouter à la toile, je reçois une exception - Storyboard.being () le jette et me dit que cela ne peut pas trouver la propriété d'animateur. P> SO - Qu'est-ce que je fais mal? p>
4 Réponses :
Oui, vous devez définir cette propriété comme une propriété de dépendance, pas seulement une propriété CLR régulière. Cela implique un peu de code de plaque de chaudière simple. Voir donc Blog Post pour un exemple complet: p>
http: //timheuer.com/blog/archive/2012/03/07/créating-custom-controls-for-metro-style-apps.aspx P>
Je viens d'essayer de l'enregistrer comme dépendanceProperty (code mis à jour) et j'ai la même erreur
Votre chemin de propriété est faux, votre objet cible est un Funkyshape CODE>, comme spécifié dans cet énoncé
Storyboard.SetTarget (G1, this); code> Votre propriété cible doit donc être
Animateur code>,
scénariste.settargetProperty (g1, "animateur"); code> - En outre, vous devez ajouter un gestionnaire à l'événement modifié de dépendanceProperty afin de mettre à jour votre interface utilisateur car la propriété de dépendance est Animé.
@Coline: L'animation n'appellera pas la séchis de la propriété, non? Mais cela appellerait-il un caractère de propriétéCallageDcallback?
Oui, cela n'appelle pas votre constructeur de propriétés, il modifie directement le DP. Pour cette raison, vous devez gérer le rappel modifié.
Ok, à ce stade, je pense que vous vous rendantez de nous, j'ai de nouveau changé le code et j'ai la même erreur: "Impossible de résoudre TargetProperty Animator sur un objet spécifié.". Si vous connaissez la solution, pouvez-vous s'il vous plaît modifier le code et nous aider à sortir?
Dans Windows 8, vous ne pouvez pas animer des propriétés personnalisées sans définir également la propriété en compatibilitéAnimation à la réalité. En effet, les animations non déterministes sont désactivées par défaut. P>
Référence: http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.media.animation.pointanimation.EnableableAnimation.aspx P> blockQuote>
Comme dit sur le chat, j'ai - cultivé. - Ligne, donc ce n'est pas ça.
@Floriangl Pouvez-vous poster votre classe? Parce que cela ne fonctionne évidemment pas pour le mien?
Il n'y a rien de différent de votre classe, mais le storyboard est placé dans l'usercontrol correspondant de la viewModel (propriété animée est dans une vue de vue).
OK, P>
J'ai trouvé la solution de contournement pour ce qui est évidemment un bug dans le cadre (bien que certains employés de MS postérièrent une réponse et disent que c'est une fonctionnalité / IT-IS-SY-DESITION). Plusieurs choses doivent être faites: p>
L'ajout d'une instance à XAML l'a réalisée pour moi; Merci pour le conseil. Mais malheureusement, ce n'est pas une solution viable pour moi, car je ne veux vraiment pas d'un constructeur sans paramètre sur ma classe (cela n'aurait aucun sens). Je soupçonne que cela fonctionne car le compilateur XAML génère des métadonnées sur les types utilisés dans XAML, et le storyboard exige que les métadonnées. Je vous ferai savoir si je trouve une meilleure solution de contournement.
Étape 4 Peut-être que la réponse de Tim Heuer à
OK, j'ai aussi eu ce problème, mais je ne voulais pas inclure d'un constructeur sans paramètre public dans ma classe, alors j'ai trouvé une autre manière. P>
Fondamentalement, le problème est que WinRT est une plate-forme natale et ne peut pas faire de la réflexion sur le code .NET. C'est pourquoi le processus de construction des applications WinRT génère des métadonnées sur les types utilisés dans XAML (vous pouvez trouver le code correspondant dans Si un type n'est jamais utilisé dans XAML, aucune métadonnée à propos de ce type est générée, ce qui signifie (entre autres) que vous ne pouvez pas animer les propriétés du type. P>
Si vous écrivez une bibliothèque de classe, vous pouvez simplement inclure un dictionnaire de ressources XAML et déclarer une instance factice du type; Il provoquera généré des métadonnées. Cependant, il faut que le type ait un constructeur sans paramètre public, qui pourrait ne pas être souhaitable. P>
Il y a donc une autre solution: fournir les métadonnées vous-même. Il existe plusieurs interfaces à mettre en œuvre et de nombreux membres peuvent donc être assez fastidieux à faire manuellement. Heureusement, vous n'êtes pas obligé! Voici ce que vous pouvez faire: p>
Et vous avez terminé, l'animation fonctionne maintenant correctement. P>
Le processus est toujours assez fastidieux, il serait donc agréable d'avoir un outil pour faire le travail pour nous ... P>
Edit: beaucoup em> solution plus facile: appliquez le obj / (débogage de débogage) /xamltypeinfo.g.cs code>). P>
Dossier code> et déclarer une instance de la classe en elle (comme décrit ci-dessus) li>
xamltypeinfo.g.cs code> dans votre projet (je l'ai renommé sur
xamltypeinfo.cs code>) li>
lancer une nouvelle notimplementeedException () code> li>
Dossier Code> Fichier Li>
[liait] code>
attribut à la classe. Il rend le générateur de métadonnées prend en compte le type même s'il n'est pas utilisé dans XAML. (Ignorer le fait que le DOC dit que c'est pour les types C ++; cela fonctionne aussi bien sur les classes C #) P>
C'est exactement le même problème que je suis confronté à guichet automatique. Si vous trouvez une solution, veuillez le poster ici, je le ferai donc.)
Je pense que cela est associé: Charlespetzold.com/blog/2012/03/...
Eh bien, cet article est lié à celui-ci blog.jerrynixon .COM / 2012/06 / Windows-8-Animated-Pie-SLICE.HTM L
@Jerrynixon Oh oui - TNX pour lier votre blog aussi - vous avez de bons messages là-bas.