J'ai rencontré le même problème, et aucun de ces messages n'a vraiment aidé parce que les animations sont en code, et certaines d'entre elles étaient grandes et compliquées et nécessitaient des variables fluctuantes, donc elles devaient rester dans le code. Je l'ai résolu en ajoutant des propriétés de dépendance dans le contrôle utilisateur (vue) qui déclenchent les animations et en les liant aux propriétés du modèle de vue. Je ne sais pas (/ soin) si cela viole quelque chose ou autre, parce que cela fonctionne très bien! acclamations, Stepp
extrait:
(vue) Code Usercontrol derrière:
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
SetAnimationBindings();
}
private void SetAnimationBindings()
{
_dialogStartPosition = mbFolderBrowse.Margin;
var propName = "StartDialogAnimation";
var binding = new Binding(propName) { Mode = BindingMode.TwoWay };
this.SetBinding(DialogAnimationProperty, binding);
propName = "StartProgressAnimation";
binding = new Binding(propName) { Mode = BindingMode.TwoWay };
this.SetBinding(ProgressAnimationProperty, binding);
}
#region Animation Properties
#region DialogAnimation
public static readonly DependencyProperty DialogAnimationProperty =
DependencyProperty.Register("DialogAnimation", typeof(bool),
typeof(Manage), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnDialogAnimationChanged));
public bool DialogAnimation
{
get { return (bool)this.GetValue(DialogAnimationProperty); }
set
{
var oldValue = (bool)this.GetValue(DialogAnimationProperty);
if (oldValue != value) this.SetValue(DialogAnimationProperty, value);
}
}
private static void OnDialogAnimationChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
{
Manage m = o as Manage;
if ((bool)e.NewValue == true)
m.SlideInDialogPanel(); // animations
else
m.SlideOutDialogPanel();
}
#endregion
View-Modèle:
public bool StartDialogAnimation
{
get { return _startDialogAnimation; }
set
{
if (_startDialogAnimation != value)
{
_startDialogAnimation = value;
RaisePropertyChanged("StartDialogAnimation");
}
}
}
Je sais comment faire. Vous définissez un déclencheur pour démarrer le storyboard lorsque vous entrez une condition. Mais j'ai juste besoin de faire une animation unique: je veux faire un flash rapide et temporaire sur un élément de l'interface utilisateur pour attirer l'attention. – RandomEngy
Je n'ai pas envisagé de généraliser cela, donc je ne sais pas si cela vous aide. J'ai déjà eu un besoin similaire. Je devais 'clignoter' un bouton s'il n'y avait pas d'activité pendant une minute. Je l'ai fait en ayant un storyboard attaché au bouton, le storyboard ne ferait rien pendant une minute puis faire le flash. Dans mon cas, le bouton disparaissait lorsqu'on le cliquait, ce qui rendait le scénario plus simple. Un flash sur un élément d'interface utilisateur pour attirer l'attention ressemble à une vue uniquement liée. Y a-t-il une façon dont la vue peut déterminer quand à l'éclair par lui-même? Pourquoi la VM se soucierait-elle de faire clignoter un élément d'interface utilisateur? Désolé, cela peut ne pas être d'une grande aide. – Carlos
Eh bien, plusieurs commandes qui se déclenchent sur une fenêtre déclencheraient ce flash dans une autre fenêtre. Mon modèle de fenêtrage est configuré de telle sorte que la VM connaisse les relations entre les fenêtres, mais pas les vues. – RandomEngy