首页 文章

在Xamarin.Forms中没有交互性的叠加层

提问于
浏览
4

最近,Xamarin.Forms使用 ClearDefault background更改了控件的行为 . 此PR中描述了这些更改:https://github.com/xamarin/Xamarin.Forms/pull/935

这个变化在我的两个应用程序中发生了相当大的变化 . UWP和WPF中的默认XAML行为是 Background 清除时( x:Null ),视觉是点击,但如果它有一些孩子,您仍然可以与它们进行交互 . 这非常重要,尤其是对于经常需要 Map 控制的应用程序,然后在其上面布置一些控件 . 如果我将图层设置为 InputTransparent ,用户无法以任何方式与图层中的任何控件进行交互,如果我没有设置它,那么我就无法与 Map 本身进行交互 .

问题是我没有看到任何简单的解决方法,因为我不能在没有布局父级的情况下布局控件 . 如果我想将它们放在网格中,我需要一个网格 . 这将阻止 Map . 与任何其他布局相同 .

我希望实现以下内容:

<CustomMapControl />
<Grid x:Name="ControlsGrid">
   <Grid.RowDefinitions>
      <RowDefinition Height="*" />
      <RowDefinition Height="*" />
   </Grid.RowDefinitions>
   <Button Grid.Row="1" Text="Zoom in" />
</Grid>
<AboluteLayout x:Name="PlaceMenuContainer" />

此代码现在不允许我与 Map 进行交互,因为网格会阻止它 . 如果我将 InputTransparent="True" 添加到网格中,我将无法再与该按钮交互,因为不再向其分发触摸交互(请参阅VisualInputRenderer, line 52 - 64) . 另请注意,我可以在 Map 上方有多个图层,例如 PlaceMenuContainer ,它是上下文菜单项的容器,当用户点击 Map 上的某个位置时,该上下文菜单项会显示在 Map 上方 . 这意味着我不能轻易地为所有控件使用单个布局容器......

你有没有看到这种方法?

2 回答

  • 0

    我收到了来自Microsoft Xamarin团队的E. Z. Hart的确认,目前正在查看此问题,并且有几位开发人员遇到了这个问题 . 要么很快就会实施新方法的解决方法,任何更新都会发布在相关的bug in Bugzilla :-)上 .

  • 1

    你尝试过类似的东西吗?

    <Grid>
       <Grid.RowDefinitions>
          <RowDefinition />
          <RowDefinition />
       </Grid.RowDefinitions>
       <CustomMapControl Grid.RowSpan="2"/>
       <Button Grid.Row="1" Text="Click me" />
    </Grid>
    

相关问题