Я реализую анимацию стиля «марширующих муравьев», применяя анимацию StrokeDashOffset к элементу управления Rectangle. Я хотел бы, чтобы анимация воспроизводилась, когда прямоугольник виден, но не занимать лишние циклы процессора, когда он скрыт. Является ли WPF достаточно умным, чтобы автоматически приостанавливать анимацию, когда скрытый элемент управления скрыт?Разве анимация раскадровки WPF продолжает работать, когда скрытый элемент управления скрыт?
ответ
Нет. WPF достаточно умен, чтобы не делать этого :). Причина этого заключается в том, что вы не можете предсказать, что такое анимированное свойство (это может быть любое свойство зависимости, не связанное с внешним видом управления).
Вы можете выполнить следующее испытание.
XAML:
<Window x:Class="WpfApplication1.TestBrowser"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="Animation Test"
Height="300"
Width="300">
<StackPanel>
<Button Content="Toggle label"
Click="ToggleLableClick"/>
<local:MyLabel x:Name="lbl" Content="Hello" />
</StackPanel>
</Window>
C#:
using System;
using System.Diagnostics;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media.Animation;
namespace WpfApplication1
{
public partial class TestBrowser : Window
{
public TestBrowser()
{
InitializeComponent();
var da = new DoubleAnimation(0, 10, new Duration(TimeSpan.FromSeconds(10)))
{
AutoReverse = true,
RepeatBehavior = RepeatBehavior.Forever
};
lbl.BeginAnimation(MyLabel.DoublePropertyProperty, da);
}
private void ToggleLableClick(object sender, RoutedEventArgs e)
{
lbl.Visibility = lbl.IsVisible ? Visibility.Collapsed : Visibility.Visible;
}
}
public class MyLabel : Label
{
public double DoubleProperty
{
get { return (double)GetValue(DoublePropertyProperty); }
set { SetValue(DoublePropertyProperty, value); }
}
public static readonly DependencyProperty DoublePropertyProperty =
DependencyProperty.Register("DoubleProperty", typeof(double), typeof(MyLabel),
new FrameworkPropertyMetadata(0.0,
FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.AffectsArrange, OnDoublePropertyChanged));
private static void OnDoublePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
Trace.WriteLine(e.NewValue);
}
protected override Size MeasureOverride(Size constraint)
{
Trace.WriteLine("Measure");
return base.MeasureOverride(constraint);
}
protected override Size ArrangeOverride(Size arrangeBounds)
{
Trace.WriteLine("Arrange");
return base.ArrangeOverride(arrangeBounds);
}
}
}
Вы заметите доказать МОФ блеска в отладочный вывод: он показывает DoubleProperty
изменения независимо от того, управлять видимым или нет, но видимость имеет значение, когда дело доходит до Measure/Arrange. Обработчики не вызывают, когда управление рушится, хотя я обозначил DoubleProperty как свойство, которое влияет на meausre и организует ...
Я думаю, что анимация продолжается, но система рендеринга поймет, что прямоугольник невидим и не будет тратить время на перерисовку всего.
Можно анимировать свойства видимости или непрозрачности, которые не будут работать, если анимационная система учитывает видимость.
- 1. WPF: Validation.ErrorTemplate не скрыт, когда украшен элемент управления (TextBox) скрыт
- 2. Анимация продолжает работать, даже когда элемент управления отсоединен от его родителя
- 3. WPF-анимация, которая всегда работает, когда элемент управления виден
- 4. Анимированная анимация продолжает повторяться, возможно, сама запускает?
- 5. outerWidth() Возвращает другое значение, когда элемент скрыт
- 6. WPF «Скрыт» за панелью
- 7. WPF ValidationRule Подтвердить, когда элемент управления загружен
- 8. Показать, что элемент скрыт
- 9. WPF вызывает элемент управления
- 10. Получить если элемент скрыт или внутри скрытый контейнер
- 11. WPF - элемент управления контентом
- 12. Waypoints не работает, когда элемент изначально скрыт
- 13. Анимация прекращается, когда ListBoxItem не отображается (WPF)
- 14. WPF найти элемент управления
- 15. Обернутый элемент управления WPF
- 16. Элегантный элемент управления WPF
- 17. WPF анимация: привязка к атрибуту «To» анимации раскадровки
- 18. WPF: скрытый родитель и видимый ребенок
- 19. Обновить родительский элемент, когда элемент управления изменяет значение в WPF
- 20. Почему новый элемент скрыт, когда старый элемент, к которому прикреплен новый элемент, скрыт?
- 21. Функция триггера jquery, когда элемент скрыт
- 22. Невозможно найти элемент, когда div скрыт
- 23. show() не работает, когда элемент скрыт.
- 24. Пропустить проверку jQuery, когда элемент div скрыт
- 25. Комментировать элемент, если он скрыт
- 26. Динамическая анимация с использованием раскадровки
- 27. Анимация WPF ImageBrush in ProgressBar Шаблон управления
- 28. Как определить, анимация раскадровки
- 29. Установить элемент Скрытый при нажатии
- 30. Выберите скрытый элемент с PHPunit