Вы не можете ссылаться на один и тот же таймер.Я создал статический класс:
using System.Timers;
namespace wpf_GlobalTimer
{
public static class TimerParent
{
public static Timer GlobalTimer { get; set; } = new Timer(3000)
{
AutoReset = true,
Enabled = true
};
}
}
Затем я добавил простое окно с анимацией:
<Window.Resources>
<Storyboard x:Key="TestStoryboard">
<DoubleAnimation
From="200"
To="0"
Storyboard.TargetProperty="(Rectangle.Height)"
Storyboard.TargetName="Rect"
FillBehavior="Stop"
Duration="0:0:2"
/>
</Storyboard>
</Window.Resources>
<Grid>
<Rectangle Name="Rect" Height="200" Fill="Green"/>
</Grid>
</Window>
и
public partial class Window1 : Window
{
private Timer timer = null;
private Storyboard sb = null;
public Window1()
{
InitializeComponent();
timer = TimerParent.GlobalTimer;
timer.Elapsed += OnTimedEvent;
sb = this.Resources["TestStoryboard"] as Storyboard;
}
private void OnTimedEvent(Object source, ElapsedEventArgs e)
{
Application.Current.Dispatcher.InvokeAsync(new Action(() =>
{
sb.Begin();
}));
}
}
в Mainwindow Я добавил кнопку для создания и отображения нескольких окон1
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Window win = new Window1();
win.Show();
}
Когда я раскручиваю это и нажимаю кнопку несколько раз, у меня есть 3 экземпляра window1, и их анимация синхронизируется.