Я столкнулся с той же проблемой, и ни одна из этих должностей действительно не помогла, потому что анимации в коде, а некоторые из них были большими и сложными и требовали переменные переменные, поэтому им пришлось оставаться в коде. Я разрешил его, добавив свойства зависимостей в пользовательский элемент управления (представление), которые запускают анимацию, и привязывая их к свойствам в модели представления. Не знаю (/ care), если это что-то нарушает, потому что оно работает очень хорошо! веселит, STEPP
выдержка:
(вид) UserControl код позади:
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-модель:
public bool StartDialogAnimation
{
get { return _startDialogAnimation; }
set
{
if (_startDialogAnimation != value)
{
_startDialogAnimation = value;
RaisePropertyChanged("StartDialogAnimation");
}
}
}
Я знаю, как сделать это. Вы устанавливаете триггер для запуска раскадровки при вводе условия. Но мне просто нужно сделать одноразовую анимацию: я хочу сделать быструю временную вспышку на элементе пользовательского интерфейса, чтобы привлечь к ней внимание. – RandomEngy
Я не думал об этом обобщить, поэтому я не знаю, поможет ли это вам. У меня когда-то была аналогичная потребность. Я должен был «намотать» кнопку, если на минуту не было никакой активности. Я сделал это, когда к кнопке прикреплен раскадровки, раскадровка ничего не сделала ни на минуту, а затем сделала бы вспышку. В моем случае кнопка удалилась, когда щелкнула, чтобы упростить сценарий. Вспышка элемента UI для захвата внимания звучит, как только просмотр. Есть ли способ, которым представление может определить, когда к вспышке само по себе? Почему VM заботится о мигании элемента пользовательского интерфейса? Извините, это может быть не очень полезно. – Carlos
Ну, несколько команд, которые срабатывают в одном окне, запускают эту вспышку в другое окно. Моя оконная модель настроена так, что VM знает о взаимоотношениях между окнами, но взглядов нет. – RandomEngy