如何为StackLayout编写命令

时间:2018-07-05 07:44:25

标签: xamarin xamarin.forms xamarin.ios xamarin.android

在我的项目中,我使用了XamEffects软件包参考 enter link description here

<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不适用于此程序包。只有Command才有效。

所以请帮帮我。 问候

3 个答案:

答案 0 :(得分:1)

我认为不需要xamarin形式的任何软件包,您所需要做的就是

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

    </StackLayout.GestureRecognizers>
    <Label Text="hello touch me"/>
</StackLayout>

答案 1 :(得分:1)

下面是在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
}

希望有帮助!

答案 2 :(得分:1)

我在自述文件中指定了,您不能使用具有我的效果的手势:

  

重要提示:如果您需要一些具有触摸效果的手势,请不要使用   GestureRecognizer,但是使用命令,因为效果无法正常工作   在Xamarin.Forms中使用标准手势。

请在您的控件中使用commands

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
}