【发布时间】:2020-01-21 12:39:04
【问题描述】:
在 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>
图像按照我的意愿反复正确翻译,但我无法停止 while 例程。当 ViewModel 中的 Animated 设置为 false 并且永远不会调用 OnDetachingFrom 时,属性绑定不起作用。 我究竟做错了什么?有什么建议吗?
【问题讨论】:
标签: xamarin.forms mvvmcross behavior