Xamarin.Forms:如何设置' GestureRecognizers'很有型

时间:2018-05-25 06:32:11

标签: xaml xamarin xamarin.forms xamarin.ios

这可能是一个愚蠢的问题,但我只是想知道,因为我是Xamarin.forms的新手。

我们可以设置' GestureRecognizers'很有型。例如,我想为下面的标签创建一个样式......

<Style TargetType="Label" x:Key="LabelStyle">

    <Setter Property="GestureRecognizers">
        <Setter.Value>
            <TapGestureRecognizer Command="{Binding EditSectionCommand}"/>
        </Setter.Value>
    </Setter>
</Style>

但它显示编译时错误&#39;无法解决标签上的GestureRecognizers问题。

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您无法在样式中设置此 onDeleteClick(id) { console.log(id); } 属性。由于GestureRecognizers不是默认标签中的可绑定属性。

如果您确实想使用Style配置GestureRecognizers,可以尝试构建自定义标签。定义一个可绑定的命令属性,用于处理标签的TapGestureRecognizer事件:

TapGestureRecognizer

最后,您可以在XAML中使用此命令:

public class CustomLabel : Label
{
    public ICommand MyCommand
    {
        get
        {
            return (ICommand)GetValue(MyCommandProperty);
        }
        set
        {
            SetValue(MyCommandProperty, value);
        }
    }
    public static readonly BindableProperty MyCommandProperty = BindableProperty.Create(nameof(MyCommand), typeof(ICommand), typeof(CustomLabel), null,
                                                                propertyChanged: (bindable, oldValue, newValue) =>
                                                                {
                                                                    // Add a Tap gesture to this label, and its command is the bindableproperty we add above 
                                                                    var control = (CustomLabel)bindable;
                                                                    control.GestureRecognizers.Clear();

                                                                    TapGestureRecognizer tap = new TapGestureRecognizer();
                                                                    tap.Command = newValue as ICommand;
                                                                    control.GestureRecognizers.Add(tap);
                                                                });
}