【问题标题】:Xamarin Forms Clickable ImagesXamarin 形成可点击的图像
【发布时间】:2015-11-24 00:43:58
【问题描述】:

我最初实现了此功能,但只是将图像添加到按钮。然后我意识到我可以简单地向图像添加一个点击手势(不使用按钮)。有什么建议是最好的方法,为什么?谢谢。

【问题讨论】:

    标签: image button xamarin.forms


    【解决方案1】:

    我将自己的“OnClick”事件用于 Image :) 和自定义控件:

        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}" /> 
    

    【讨论】:

    • 此代码无法避免多次点击,并且执行适用于所有点击。
    【解决方案2】:

    这取决于你想要达到的视觉效果。

    • 如果您使用 Button,您将获得点击动画(取决于平台)和特定的按钮边框。您对图像外观的控制要少得多(它位于按钮文本的左侧)。
    • 如果您使用普通的 TapGestureRecognizer,您将获得一个可以完全控制纵横比/大小等的普通图像。

    【讨论】:

    • TapGestureRecognizer 可能是最简单的,因为它是可点击的完整图像并且按钮可能有点奇怪。我在这里做:github.com/jamesmontemagno/Hanselman.Forms/blob/master/…
    • @JamesMontemagno 我不同意你的看法。按钮具有“单击”事件,但 TapGestureRecognizer ......在用户点击几秒钟之前如何处理一次点击。所有示例代码和 Hanselman 都提供了示例,但他们没有在现实生活中尝试。
    【解决方案3】:

    你可以使用绝对布局,它可以用来将两个元素放在一起,确保按钮是第二个元素。

    <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>
    

    【讨论】:

      猜你喜欢
      • 2020-04-11
      • 1970-01-01
      • 2018-12-27
      • 1970-01-01
      • 2015-12-19
      • 2020-05-04
      • 1970-01-01
      • 2016-08-28
      • 1970-01-01
      相关资源
      最近更新 更多