Xamarin.Forms 中无交互性的叠加层
Overlay layer without interactivity in Xamarin.Forms
最近 Xamarin.Forms 更改了具有 Clear
和 Default
背景的控件的行为。此 PR 中描述了更改:https://github.com/xamarin/Xamarin.Forms/pull/935
这个变化对我的两个应用程序来说是一个相当大的突破性变化。 UWP 和 WPF 中的默认 XAML 行为是,当 Background
清晰时(x:Null
),视觉是 click-through,但如果它有一些 children,您仍然可以与他们互动。这对于您经常需要地图控件然后在其上方布局一些控件的地图应用程序尤其重要。如果我将图层设置为 InputTransparent
,则用户无法以任何方式与图层中的任何控件进行交互,如果我不进行设置,那么我将无法与地图本身进行交互。
问题是我没有看到任何简单的解决方法,因为我无法在没有布局 parent 的情况下对控件进行布局。如果我想把它们放在一个网格中,我需要在它们上面有一个网格。这将阻止地图。与任何其他布局相同。
我想实现如下目标:
<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" />
此代码现在不允许我与地图交互,因为网格遮挡了它。如果我将 InputTransparent="True"
添加到网格,我将无法再与按钮交互,因为触摸交互不再分派给它们(请参阅 VisualInputRenderer, line 52 - 64)。另请注意,我可以在地图上方设置多个图层,例如 PlaceMenuContainer
,它是上下文菜单项的容器,当用户点击地图上的某个位置时,这些菜单项将显示在地图上方。这意味着我无法轻松地为所有控件使用单个布局容器...
你有什么解决办法吗?
你有没有试过
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<CustomMapControl Grid.RowSpan="2"/>
<Button Grid.Row="1" Text="Click me" />
</Grid>
我从 Microsoft Xamarin 团队的 E. Z. Hart 那里得到了确认,目前正在研究这个问题,并且有几个开发人员 运行 解决了这个问题。要么很快实施新方法的解决方法,任何更新都将发布在相关 bug in Bugzilla :-)。
最近 Xamarin.Forms 更改了具有 Clear
和 Default
背景的控件的行为。此 PR 中描述了更改:https://github.com/xamarin/Xamarin.Forms/pull/935
这个变化对我的两个应用程序来说是一个相当大的突破性变化。 UWP 和 WPF 中的默认 XAML 行为是,当 Background
清晰时(x:Null
),视觉是 click-through,但如果它有一些 children,您仍然可以与他们互动。这对于您经常需要地图控件然后在其上方布局一些控件的地图应用程序尤其重要。如果我将图层设置为 InputTransparent
,则用户无法以任何方式与图层中的任何控件进行交互,如果我不进行设置,那么我将无法与地图本身进行交互。
问题是我没有看到任何简单的解决方法,因为我无法在没有布局 parent 的情况下对控件进行布局。如果我想把它们放在一个网格中,我需要在它们上面有一个网格。这将阻止地图。与任何其他布局相同。
我想实现如下目标:
<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" />
此代码现在不允许我与地图交互,因为网格遮挡了它。如果我将 InputTransparent="True"
添加到网格,我将无法再与按钮交互,因为触摸交互不再分派给它们(请参阅 VisualInputRenderer, line 52 - 64)。另请注意,我可以在地图上方设置多个图层,例如 PlaceMenuContainer
,它是上下文菜单项的容器,当用户点击地图上的某个位置时,这些菜单项将显示在地图上方。这意味着我无法轻松地为所有控件使用单个布局容器...
你有什么解决办法吗?
你有没有试过
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<CustomMapControl Grid.RowSpan="2"/>
<Button Grid.Row="1" Text="Click me" />
</Grid>
我从 Microsoft Xamarin 团队的 E. Z. Hart 那里得到了确认,目前正在研究这个问题,并且有几个开发人员 运行 解决了这个问题。要么很快实施新方法的解决方法,任何更新都将发布在相关 bug in Bugzilla :-)。