Xamarin 形成可点击的图像
Xamarin Forms Clickable Images
我最初实现了此功能,但只是将图像添加到按钮。然后我意识到我可以简单地向图像添加点击手势(w/o 使用按钮)。有什么建议是最好的方法吗?为什么?谢谢。
这取决于你想要达到的视觉效果。
- 如果您使用 Button,您将拥有点击动画(取决于平台)和特定的按钮边框。您对图像外观的控制要少得多(它位于按钮文本的左侧)。
- 如果您使用普通的 TapGestureRecognizer,您将拥有一个可以完全控制纵横比 ratio/size 等的普通图像。
我使用自己的 "OnClick" 图像事件 :) 和自定义控件:
public class MyImage : Xamarin.Forms.Image
{
public static BindableProperty OnClickProperty =
BindableProperty.Create("OnClick", typeof(Command), typeof(MyImage));
public Command OnClick
{
get { return (Command)GetValue(OnClickProperty); }
set { SetValue(OnClickProperty, value); }
}
public MyImage()
{
GestureRecognizers.Add(new TapGestureRecognizer() {Command = new Command(DisTap)});
}
private void DisTap(object sender)
{
if (OnClick != null)
{
OnClick.Execute(sender);
}
}
}
然后将它与 MVVM 一起使用,例如:
<local:MyImage Source="{Binding Img}" OnClick="{Binding ImgTapCommand}" />
你可以使用绝对布局,它可以用来将两个元素放在彼此之上,确保按钮是第二个元素。
<AbsoluteLayout>
<Image Source="clock.png" AbsoluteLayout.LayoutBounds="0.2,0.2,35,35" AbsoluteLayout.LayoutFlags="PositionProportional"/>
<Button AbsoluteLayout.LayoutBounds="0.2,0.2,35,35" AbsoluteLayout.LayoutFlags="PositionProportional" BorderColor="Transparent" BackgroundColor="Transparent" Command="{Binding AlertMeCommand}"/>
</AbsoluteLayout>
我最初实现了此功能,但只是将图像添加到按钮。然后我意识到我可以简单地向图像添加点击手势(w/o 使用按钮)。有什么建议是最好的方法吗?为什么?谢谢。
这取决于你想要达到的视觉效果。
- 如果您使用 Button,您将拥有点击动画(取决于平台)和特定的按钮边框。您对图像外观的控制要少得多(它位于按钮文本的左侧)。
- 如果您使用普通的 TapGestureRecognizer,您将拥有一个可以完全控制纵横比 ratio/size 等的普通图像。
我使用自己的 "OnClick" 图像事件 :) 和自定义控件:
public class MyImage : Xamarin.Forms.Image
{
public static BindableProperty OnClickProperty =
BindableProperty.Create("OnClick", typeof(Command), typeof(MyImage));
public Command OnClick
{
get { return (Command)GetValue(OnClickProperty); }
set { SetValue(OnClickProperty, value); }
}
public MyImage()
{
GestureRecognizers.Add(new TapGestureRecognizer() {Command = new Command(DisTap)});
}
private void DisTap(object sender)
{
if (OnClick != null)
{
OnClick.Execute(sender);
}
}
}
然后将它与 MVVM 一起使用,例如:
<local:MyImage Source="{Binding Img}" OnClick="{Binding ImgTapCommand}" />
你可以使用绝对布局,它可以用来将两个元素放在彼此之上,确保按钮是第二个元素。
<AbsoluteLayout>
<Image Source="clock.png" AbsoluteLayout.LayoutBounds="0.2,0.2,35,35" AbsoluteLayout.LayoutFlags="PositionProportional"/>
<Button AbsoluteLayout.LayoutBounds="0.2,0.2,35,35" AbsoluteLayout.LayoutFlags="PositionProportional" BorderColor="Transparent" BackgroundColor="Transparent" Command="{Binding AlertMeCommand}"/>
</AbsoluteLayout>