У меня есть MVVMLight
многостраничное приложение, которое имеет две страницы, я могу переходить с одной страницы на другую, нажимая соответствующие кнопки.
На второй странице у меня есть анимация загрузчика, которая срабатывает каждый раз, когда что-то вводится в поле textBox
.Все работает нормально;с первой страницы я могу перейти на вторую страницу, затем вы набираете что-то в textBox
и начинается анимация.Проблема заключается в том, что если я перехожу на вторую страницу, то я возвращаюсь на первую страницу, а затем снова перехожу на вторую страницу и набираю что-то в textBox
. Я получаю сообщение об ошибке, которое говорит, что имя загрузчика нене существует, забавно то, что я не получаю эту ошибку, пока не покину страницу и не вернусь.
Есть идеи, почему анимация перестает работать после ухода со страницы и возвращения?
РЕДАКТИРОВАТЬ : Вот ссылка на полный проект.https://www.dropbox.com/sh/yf87shw5rzxtxen/AAClTesIGpLKl6IzV-6pjfEfa?dl=0
Чтобы повторить ошибку, сделайте следующее ...
Скачайте и откройте приложение.
Перейти на страницу2.
Введите что-нибудь в текстовое поле (анимация должна запуститься).
Вернитесь на страницу 1, ничего не делайте.
Снова перейдите на страницу 2 и попробуйте набрать что-нибудь в текстовом поле (здесь должна появиться ошибка).
Ошибка:
Дополнительная информация: имя 'rectangleLoader' не может быть найдено в области имен 'TwoViews.Views.SecondView'.
![enter image description here](https://i.stack.imgur.com/psTGq.jpg)
XAML
<UserControl x:Class="TwoViews.Views.SecondView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
d:DesignHeight="300"
d:DesignWidth="300"
mc:Ignorable="d">
<Grid>
<Rectangle x:Name="rectangleLoader" Fill="#FFB2B2FF" HorizontalAlignment="Left" Height="19" Margin="26,89,0,0" VerticalAlignment="Top" Width="248"/>
<TextBox x:Name="textBoxFileName"
HorizontalAlignment="Left"
Height="35" Width="180"
Margin="26,125,0,0"
VerticalAlignment="Top"
Text="{Binding InputFileNameChanged, UpdateSourceTrigger=PropertyChanged}" FontSize="18"/>
</Grid>
</UserControl>
SecondView.xaml.cs
namespace TwoViews.Views
{
public partial class SecondView : UserControl
{
private Storyboard loaderStoryboard;
public SecondView()
{
InitializeComponent();
Messenger.Default.Register<MessageSearchStatus>(this, messageSearchStatus => ReceivedSearchStatus(messageSearchStatus));
/// Animation for loader
DoubleAnimation myDoubleAnimation = new DoubleAnimation();
myDoubleAnimation.From = 100;
myDoubleAnimation.To = 0;
myDoubleAnimation.Duration = new Duration(TimeSpan.FromSeconds(.1));
myDoubleAnimation.AutoReverse = true;
myDoubleAnimation.RepeatBehavior = RepeatBehavior.Forever;
loaderStoryboard = new Storyboard();
loaderStoryboard.Children.Add(myDoubleAnimation);
Storyboard.SetTargetName(myDoubleAnimation, rectangleLoader.Name);
Storyboard.SetTargetProperty(myDoubleAnimation, new PropertyPath(Rectangle.WidthProperty));
}
private void ReceivedSearchStatus(MessageSearchStatus message)
{
loaderStoryboard.Begin(this, true);
}
/// I manually stop the animation before going to other screens
private void stopAnimation_Click(object sender, System.Windows.RoutedEventArgs e)
{
loaderStoryboard.Stop(this);
}
}
}
ViewModel
namespace TwoViews.ViewModels
{
public class SecondViewModel : ViewModelBase
{
private string _inputFileName;
public string InputFileNameChanged
{
get { return _inputFileName; }
set {
// send message to start animation everytime the textBox changes
Messenger.Default.Send<MessageSearchStatus>(new MessageSearchStatus { isSearchingFile = true });
}
}
}
}
Обратите внимание, что в моем коде I 'я не показываю код, который останавливает анимацию.
Опять же, анимация работает нормально, пока пользователь не покинет страницу, где анимация, и не вернется.
Спасибо!