这是我的XAML。 ContentView
位于AbsoluteLayout
内,但我认为不重要。我们的想法是拥有一个带有列表视图的框架,以及一个围绕它的黑暗背景。如果用户点击Overlay_Tapped
。
Frame
在iOS中,永远不会调用SpinnerList_ItemSelected
。相反,即使用户点击 Overlay_Tapped
,Frame
也是如此。在Android中一切都很好。
我尝试在InputTransparent="False"
,Frame
甚至ListView
中设置ViewCell
。没有帮助。有用的是在NumberOfTapsRequired="2"
中设置TapGestureRecognizer
,但这显然不是我的意图。
帮助?
<ContentView
x:Name="SpinnerOverlay"
AbsoluteLayout.LayoutBounds="0,0,1,1"
AbsoluteLayout.LayoutFlags="All"
IsVisible="False"
InputTransparent="False"
BackgroundColor="{x:Static engine:LmcColor.overlay}">
<Frame
OutlineColor="Black"
Padding="10,10,10,10"
BackgroundColor="White"
HorizontalOptions="Center"
VerticalOptions="Center">
<ListView
x:Name="SpinnerList"
HorizontalOptions="Center"
VerticalOptions="Center"
HasUnevenRows="False"
SeparatorColor="Transparent"
ItemSelected="SpinnerList_ItemSelected">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ContentView
Padding="5,0,5,0"
BackgroundColor="{Binding BackColor}">
<Label
Text="{Binding ItemText}"
Style="{StaticResource StandardStyle}"/>
</ContentView>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Frame>
<ContentView.GestureRecognizers>
<TapGestureRecognizer Tapped="Overlay_Tapped"/>
</ContentView.GestureRecognizers>
</ContentView>
答案 0 :(得分:0)
the link suggested by Sharada中描述的方法对我不起作用。它旨在确保在覆盖视图的情况下,&#34;更低的&#34;一个人有时会得到水龙头。我需要相反:我的点击需要转到顶部视图,但它会被包含range
捕获并处理。重新定义ContentView
对此没有帮助。
但尝试这种方法将我推向了自定义渲染器,我最终能够解决我的问题。我只是定义了一个&#34; native&#34; iOS手势识别器而不是HitTest()
。如果我对本机iOS开发更熟悉,我可能会提前做到这一点。我是一个Android家伙。
这是自定义渲染器代码。 Xamarin.Forms
是我在较小的子视图中确定点击不的方式。我使用viewWithPoint.Frame.Size.Equals(Frame.Size)
代替VisualElementRenderer<ContentView>
,因为后者无法正确处理ViewRenderer
。
BackgroundColor