В проекте Xamarin.Forms я пытаюсь многократно переводить изображение из положения A (x, y) в положение B (x, y) и обратно, из B в A. Для этого яПрочитайте, что можно настроить поведение.
Я расширяю класс Behavior, переопределяя OnAttachedTo и OnDetachingFrom.И в методе OnAttachedTo я запускаю задачу, которая неоднократно выполняет два перевода.
Это мой класс поведения:
public class MoveImageBehavior : Behavior<Image>
{
private Image _Image = null;
public static readonly BindableProperty AnimatedProperty = BindableProperty.Create("Animated", typeof(bool), typeof(ImageAnimatedBehavior), defaultValue: false);
public bool Animated
{
get { return (bool)GetValue(AnimatedProperty); }
set { SetValue(AnimatedProperty, value); }
}
protected override void OnAttachedTo(Image image)
{
base.OnAttachedTo(image);
_Image = image;
Animated = true;
Task.Run(AnimateImage);
}
protected override void OnDetachingFrom(Image image)
{
base.OnDetachingFrom(image);
_Image = null;
}
private async void AnimateImage()
{
while (_Image != null && Animated)
{
await _Image.TranslateTo(100, 100, 1000);
await _Image.TranslateTo(0, 0, 1000);
}
}
}
Изображение в файле xaml:
<ContentView>
<Grid>
<Image x:Name="image_translating" Source="my_icon" Aspect="AspectFit">
<Image.Behaviors>
<behaviors:MoveImageBehavior Animated="{Binding ImageTranslating}" BindingContext="{Binding BindingContext, Source={x:Reference image_translating}}"/>
</Image.Behaviors>
</Image>
</Grid>
</ContentView>
Изображение неоднократно корректно транслируется, как я хочу, но я не могу остановить рутину.Привязка свойства не работает, когда для Animated установлено значение false во ViewModel и OnDetachingFrom никогда не вызывается.Что я делаю неправильно?Есть предложения?