Как написать команду для StackLayout

В моем проекте я использовал XamEffects пакеты. Ссылка введите здесь описание ссылки

<StackLayout effect:Commands.Tap="{Binding OnTapped}" Grid.Row="1" Grid.ColumnSpan="3" Orientation="Horizontal" effect:TouchEffect.Color="Gray" effect:EffectsConfig.ChildrenInputTransparent="True">
    <Image Source="ic_cont_downtick.png" HeightRequest="25" WidthRequest="25"/>
        <StackLayout Orientation="Vertical" WidthRequest="250" Spacing="0" Margin="10,0,0,0" VerticalOptions="Center">
            <Label Text="Downloaded Content" VerticalOptions="Center" TextColor="Black"/>
            <Label BackgroundColor="#455EEC" HorizontalOptions="Start" VerticalOptions="Start" WidthRequest="20" HeightRequest="4"/>
        </StackLayout>
    <Image Source="ic_rightarrow_1.png" HeightRequest="10" WidthRequest="10" VerticalOptions="Center" HorizontalOptions="End"/>
</StackLayout>

при нажатии на stackLayout нужно перейти на другую страницу. Но TapGestureRecognizer не будет работать с этим пакетом. Только команда будет работать.

Пожалуйста, помогите мне. С уважением


person Nandha    schedule 05.07.2018    source источник


Ответы (3)


Ниже приведен код для привязки в классе ViewModel.

private Command onTapped;
private const string OnTappedCommandPropertyName = "OnTapped";

public Command OnTapped
{
    get
    {
        return onTapped ?? (onTapped = new Command(ExecuteOnTappedCommand));
    }
}

public void ExecuteOnTappedCommand()
{
    //your code here
}

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

person Ramya    schedule 05.07.2018
comment
@ Рамья Это не работает - person Nandha; 05.07.2018
comment
@nandha Я работал над примером проекта github.com/ramyareddyn/Sample, и он работает. - person Ramya; 05.07.2018
comment
Я посмотрю на это. Спасибо @ Ramya - person Nandha; 06.07.2018

Я думаю, что для этого не нужен какой-либо пакет в формах xamarin. Все, что вам нужно сделать, это

<StackLayout>
    <StackLayout.GestureRecognizers>
        <TapGestureRecognizer Command="{Binding tryit}"/>

    </StackLayout.GestureRecognizers>
    <Label Text="hello touch me"/>
</StackLayout>
person mohammed mazin    schedule 05.07.2018
comment
Мне нужен сенсорный эффект, поэтому я использовал этот пакет - person Nandha; 05.07.2018
comment
Вы используете призму xamarin? - person mohammed mazin; 05.07.2018

Я указал в Readme, с моим эффектом нельзя использовать жесты:

Важно: если вам нужны какие-то жесты с сенсорным эффектом, используйте не GestureRecognizer, а Commands, потому что со стандартными жестами в Xamarin.Forms эффекты работают некорректно.

Используйте для этого команды:

effect:TouchEffect.Color="Gray" 
effect:Commands.Tap="{Binding TapCommand}"
effect:EffectsConfig.ChildrenInputTransparent="True"

В ViewModel создайте ICommand:

private ICommand _tapCommand;
public ICommand TapCommand => _tapCommand ?? (_tapCommand = new Command(TapExecute));

private void TapExecute()
{
   //something
}
person Vladislav    schedule 27.08.2018