Необходимо сделать в главном окне в центре Label и чтобы каждые 2 секунды текст плавно сменялся другим. Текст можно указать в массиве string[], сделать это в цикле, но нужно плавное изменение. В winFoms этого можно добиться через Timer и изменение цвета, есть ли в WPF какой-нибудь более быстрый способ?
Asked
Active
Viewed 720 times
1
Fresto
- 1,158
-
2В WPF тоже есть таймер – Андрей NOP Nov 27 '17 at 07:00
-
Что значит «более быстрый»? – VladD Nov 27 '17 at 13:48
-
Ну вот вам пример. Он не более быстрый, а более медленный, но более правильный. – VladD Nov 27 '17 at 13:52
-
@VladD Я всё же нашел решение на сайте msdn, но спасибо за пример, изучу его – Fresto Nov 30 '17 at 10:31
1 Answers
0
private void button_Click(object sender, RoutedEventArgs e)
{
button.Opacity = 0;
timer = new DispatcherTimer();
timerZ = new DispatcherTimer();
timer.Interval = interval;
timer.Tick += Timer_Tick;
timer.Start();
}
DispatcherTimer timer, timerZ;
double i = 1;
int z = 0;
bool isUpper = false;
private void Timer_Tick(object sender, EventArgs e)
{
if (isUpper)
{
Label.Opacity = i;
i = Label.Opacity + 0.01;
if(i > 1)
{
isUpper = false;
}
}
else
{
Label.Opacity = i;
i = Label.Opacity - 0.01;
if (i < 0)
{
if (z != text.Count)
{
if (z == 4)
{
intervalZ = new TimeSpan(0, 0, 0, 0, 25);
timerZ.Interval = intervalZ;
timer.Interval = intervalZ;
}
TextBlock.Text = text[z];
z++;
i = 0;
isUpper = true;
}
else
{
timer.Stop();
}
}
}
}
Нашел я всё же решение. Изменяю по таймеру свойство Opacity
Fresto
- 1,158
-
Зачем этот изврат? Простите. Есть же
DoubleAnimationдля этого. https://learn.microsoft.com/ru-RU/dotnet/desktop/wpf/graphics-multimedia/animation-overview, используйте анимации, они будут работать плавнее и не надо будет писать кучу кода. Ссылку на пример вам дали в комментариях под вопросом. Вот здесь я показывал, как управлять анимациями из кода. – aepot Jun 17 '23 at 08:36