我有一个非常具体的场景。这是我的代码简化:
<Grid RowDefinitions="Auto" Columns="*,*">
<custom:MyCustomView Grid.Column="0" Grid.ColumnSpan="2"/>
<Button Grid.Column="0"
BackgroundColor="Transparent"
HorizontalOptions="Start">
</Grid>
我在网格中有两个控件。 MyCustomView 控件内部有一组可单击元素和一个按钮,该按钮需要覆盖该视图的一半并与其重叠。这个想法是,如果用户单击 MyCustomView 上的可点击元素(按钮),则应执行专用命令,但如果用户长按,则应执行大按钮操作。我尝试了所有InputTransparent 和ZIndex 但没有任何运气。这有可能在毛伊岛制作吗?
您的自定义视图类型是ContentView吗?如果没有,您可以将其类型更改为 ContentView,然后 CustomView 的 LongPressCommand 和 子视图的单击事件 都将起作用。
另外,如果你不想改变的话。您可以使用平台视图的长按事件而不是
LongPressCommand
。如:
<Grid RowDefinitions="Auto" Columns="*,*">
<custom:MyCustomView x:Name="customview" Grid.Column="0" Grid.ColumnSpan="2"/>
<Button Grid.Column="0"
BackgroundColor="Transparent"
HorizontalOptions="Start">
</Grid>
在后面的代码中:
protected override void OnHandlerChanged()
{
base.OnHandlerChanged();
#if ANDROID
var view = layout.Handler.PlatformView as Android.Views.View;
view.LongClick += (s, e) =>
{
// do something
};
#elif IOS
var view = this.layout.Handler.PlatformView as UIKit.UIView;
view.UserInteractionEnabled = true;
view.AddGestureRecognizer(new UIKit.UILongPressGestureRecognizer(HandleLongClick));
#endif
}
#if IOS
private void HandleLongClick(UIKit.UILongPressGestureRecognizer sender)
{
//do something
}
#endif
当然,你可以将它们放入MyCustomView.cs以避免每次都编码。