Я разрабатываю приложение в WPF, используя шаблон MVVM.
Я показываю ориентированный граф с узлами и ссылками (см. Рисунок ниже).
http://free0.hiboox.com/images/1110/diapo1c36a4b95802846b8553d2fe9b9e6639.png?26
Пользователь может перетаскивать узлы из одной «ячейки» в другую. Когда пользователь удаляет узел, его положение изменяется, чтобы выровнять его в сетке. Я хочу анимировать узел, когда его положение корректируется во время процедуры выравнивания.
Узлы, ссылки и разделители - это все элементы, отображаемые в ItemsControl. Их представление контролируется некоторыми шаблонами данных, а их положение - стилями.
Что я делаю, так это:
private void Align() {
// Computations...
TX = ... //Target X is set
TY = ... //target Y is set
X = TX;
Y = TY; // X and Y setters fire PropertyChanged
}
<Style x:Key="NodeViewStyle">
<Setter Property="Canvas.Left" Value="{Binding X, Mode=TwoWay}"/>
<Setter Property="Canvas.Top" Value="{Binding Y, Mode=TwoWay}"/>
Я хочу сделать следующее:
private void Align() {
// Computations...
TX = ...
TY = ... //TX and TY setters fire PropertyChanged
}
<Style x:Key="NodeViewStyle">
<Setter Property="Canvas.Left" Value="{Binding X, Mode=TwoWay}"/>
<Setter Property="Canvas.Top" Value="{Binding Y, Mode=TwoWay}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding State}" Value="UPDATEPOS">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation To="{Binding TX}" Duration="0:0:1"
Storyboard.TargetProperty="(Canvas.Left)"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
Но это не работает во время выполнения, так как я не могу привязать к свойству «To» моей DoubleAnimation (это Freezable).
Какой самый простой способ сделать такую динамическую анимацию? Анимация свойства "X" через таймер прямо в модели представления?