Команда шаблона Xamarin.Forms TapGesture Внутренняя метка - PullRequest
0 голосов
/ 06 марта 2019

ребята,

Мне нужна помощь на Xamarin.Forms.

У меня есть собственный шаблон, этот шаблон содержит две метки. Мне просто нужен один из ярлыков, чтобы получить команду TapGesture. В моем коде весь мой шаблон получает команду TapGesture.

Может ли кто-нибудь мне помочь?

Код ScheduleHeaderTitleTemplate: MyCustomTemplate

public partial class ScheduleHeaderTitleTemplate : ContentView
{
    #region Title
    public static readonly BindableProperty TitleProperty = BindableProperty.Create(
        propertyName: "Title",
        returnType: typeof(string),
        declaringType: typeof(ScheduleHeaderTitleTemplate),
        defaultValue: string.Empty,
        defaultBindingMode: BindingMode.TwoWay,
        propertyChanged: TitlePropertyChanged
    );
    public string Title
    {
        get { return (string)GetValue(TitleProperty); }
        set { SetValue(TitleProperty, value); }
    }
    private static void TitlePropertyChanged(BindableObject bindable, Object oldValue, Object newValue)
    {
        var scheduleHeaderTitleTemplate = (ScheduleHeaderTitleTemplate)bindable;
        scheduleHeaderTitleTemplate.title.Text = (string)newValue;
    }
    #endregion

    #region Command
    public static readonly BindableProperty CommandProperty = BindableProperty.Create(
        propertyName: nameof(Command),
        returnType: typeof(ICommand),
        declaringType: typeof(Label),
        defaultValue: null
    );
    public ICommand Command
    {
        get { return (ICommand)GetValue(CommandProperty); }
        set { SetValue(CommandProperty, value); }
    }
    #endregion

    public ScheduleHeaderTitleTemplate()
    {
        InitializeComponent();

        var tapGestureRecognizer = new TapGestureRecognizer();
        tapGestureRecognizer.Tapped += (sender, e) =>
        {
            if (Command != null && Command.CanExecute(null))
                Command.Execute(null);
        };

        GestureRecognizers.Add(tapGestureRecognizer);
    }
}

Просмотр ScheduleHeaderTitleTemplate: MyCustomTemplate

<ContentView.Content>
    <StackLayout Padding="10, 10" Spacing="0" Orientation="Horizontal" BackgroundColor="{StaticResource Primary}">
        <StackLayout Orientation="Horizontal" VerticalOptions="Center">
            <!--TAPGESTURE FOR THIS LABEL -->
            <Label Text="&#xf060;" Margin="0, 0, 15, 0" Style="{StaticResource IconWithFontAwesome}" />

            <Label x:Name="title" Margin="0, 3, 0, 0" Style="{StaticResource ScheduleSubTitle}"/>
        </StackLayout>
    </StackLayout>
</ContentView.Content>

1 Ответ

1 голос
/ 06 марта 2019

Это довольно просто.Вместо добавления TapGestureRecognizer прямо в конструкторе, добавьте его к метке, которую вы хотите.Есть два способа сделать это:

  1. Вы добавляете свойство x: Name к метке, например, "lblLink", и в своем конструкторе добавляетежест, как lblLink.GestureRecognizers.Add(yourGestureRecognizer).

  2. Вы связываете команду с меткой в ​​XAML.Вы будете точно так же, но в XAML.В основном вам необходимо добавить свойство x: Name в ContentView и добавить TapGestureRecognizer к метке:

<ContentView ...
             x:Name="View">
    <ContentView.Content>
      <StackLayout Padding="10, 10" Spacing="0" Orientation="Horizontal" BackgroundColor="{StaticResource Primary}">
        <StackLayout Orientation="Horizontal" VerticalOptions="Center">
            <!--TAPGESTURE FOR THIS LABEL -->
            <Label Text="&#xf060;" Margin="0, 0, 15, 0" Style="{StaticResource IconWithFontAwesome}">
              <Label.GestureRecognizers>
                <TapGestureRecognizer Command="{Binding Command, Source={x:Reference View}}" />
              </Label.GestureRecognizers>
            </Label>

            <Label x:Name="title" Margin="0, 3, 0, 0" Style="{StaticResource ScheduleSubTitle}"/>
        </StackLayout>
      </StackLayout>
  </ContentView.Content>
</ContentView>

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...