当包含 ListView 时,如何让用户滑动 CarouselPage?
How do I let the user swipe a CarouselPage when it contains a ListView?
在我的 Xamarin.Forms Windows Phone 8.1 应用程序中,我们有许多页面,用户可以使用 CarouselPage
在它们之间滑动。其中一个页面包含一个 ListView
填满屏幕,当该页面被选中时,用户无法再滑动;该动作被列表视图解释为在其中一个单元格中的点击。我该怎么做才能使水平滑动仍会更改轮播中的页面?我仍然想要垂直滑动来滚动列表视图。
这不能在 Xamarin Forms 项目中直接实现,因为当有可用的列表视图时,所有的点击、手势等都将由列表视图本身处理。
只有最上面的 layout/control 没有处理的手势才会被传递到它下面的 controls/layouts 中。
因此,在您的情况下,列表视图会处理所有手势,并且不会将任何内容传递到您的轮播页面。
我能想到的解决该问题的唯一方法是将列表视图的 InputTransparent
属性 设置为 true
。在这种情况下,列表视图将不会处理任何手势,所有内容都将传递到轮播页面。
但是由于您需要选择项目并从列表视图中打开详细信息页面,您可以做的是在列表视图项目模板中有一个按钮并处理按钮的点击。由于按钮是一个单独的控件并且位于列表视图之上,因此设置 InputTransparent
不会影响按钮单击 event/command 绑定。
EDIT :根据 OP 的经验,即使在设置 InputTransparent 之后,他也能够访问所选项目和列表视图的所有其他功能。
在我的 Xamarin.Forms Windows Phone 8.1 应用程序中,我们有许多页面,用户可以使用 CarouselPage
在它们之间滑动。其中一个页面包含一个 ListView
填满屏幕,当该页面被选中时,用户无法再滑动;该动作被列表视图解释为在其中一个单元格中的点击。我该怎么做才能使水平滑动仍会更改轮播中的页面?我仍然想要垂直滑动来滚动列表视图。
这不能在 Xamarin Forms 项目中直接实现,因为当有可用的列表视图时,所有的点击、手势等都将由列表视图本身处理。 只有最上面的 layout/control 没有处理的手势才会被传递到它下面的 controls/layouts 中。 因此,在您的情况下,列表视图会处理所有手势,并且不会将任何内容传递到您的轮播页面。
我能想到的解决该问题的唯一方法是将列表视图的 InputTransparent
属性 设置为 true
。在这种情况下,列表视图将不会处理任何手势,所有内容都将传递到轮播页面。
但是由于您需要选择项目并从列表视图中打开详细信息页面,您可以做的是在列表视图项目模板中有一个按钮并处理按钮的点击。由于按钮是一个单独的控件并且位于列表视图之上,因此设置 InputTransparent
不会影响按钮单击 event/command 绑定。
EDIT :根据 OP 的经验,即使在设置 InputTransparent 之后,他也能够访问所选项目和列表视图的所有其他功能。