我是Xamarin.forms的新手,我的客户希望使用Gmail这样的功能,用户可以在其中点击并按住列表项之一,并获得多选项目的选项。

该应用程序将具有不同选项的项目列表,如删除,查看,上传等。因此,基本上,它具有5个选项,并且根据Windows Mobile的限制,该应用程序不能具有4个以上的菜单选项(ToolbarItem)。因此,需要点击并保持手势。一旦用户点击并按住其中一项,ToolbarItem便会更改并替换为“仅删除”选项。通过这样做,我们可以将ToolbarItem减少到四个。

任何参考将有很大的帮助! :-)

还想知道是否可以点击并按住,那么不同的平台(iOS,Windows,Android)将如何渲染呢?它将由Xamarin.forms处理还是代码中有些东西需要针对不同的OS平台进行处理?

最佳答案

您是否考虑过使用Context Options而不是替换工具栏中的选项?

如果您可以使用“上下文选项”代替工具栏,则不需要第三方组件,因为Xamarin.Forms允许您为每个listView项轻松定义此类选项:

实例化ListView

var listView = new ListView();
listView.ItemTemplate = new DataTemplate(typeof(MyListItemCell));


数据模板应如下所示:

public class MyListItemCell : ViewCell
{
    // To register the LongTap/Tap-and-hold gestures once the item model has been assigned
    protected override void OnBindingContextChanged()
    {
        base.OnBindingContextChanged();
        RegisterGestures();
    }

    private void RegisterGestures()
    {
        var deleteOption = new MenuItem()
        {
            Text = "Delete",
            Icon = "deleteIcon.png", //Android uses this, for example
            CommandParameter = ((ListItemModel) BindingContext).Id
        };
        deleteOption.Clicked += deleteOption_Clicked;
        ContextActions.Add(deleteOption);

        //Repeat for the other 4 options

    }
    void deleteOption_Clicked(object sender, EventArgs e)
    {
         //To retrieve the parameters (if is more than one, you should use an object, which could be the same ItemModel
        int idToDelete = (int)((MenuItem)sender).CommandParameter;
        //your delete actions
    }
    //Write the eventHandlers for the other 4 options
}

10-08 01:49