如何将EventToCommandBehavior与手势识别器配合使用?
问题解答
核心问题原因
Label.GestureRecognizers集合仅支持存放GestureRecognizer派生类(比如TapGestureRecognizer),EventToCommandBehavior不属于这个类型,放在该节点下不会被识别生效。- Label本身没有
Tapped事件,直接给Label.Behaviors添加EventToCommandBehavior并监听Tapped事件,系统找不到对应事件,因此点击无响应。
符合一致性要求的解决方案
要和你处理Appearing事件的风格统一,推荐使用Xamarin Community Toolkit提供的TapGestureBehavior——它是专门的点击行为组件,和EventToCommandBehavior一样属于控件行为,可直接放在Label.Behaviors集合中,写法结构完全一致:
<Label Text="{Binding Name}"> <Label.Behaviors> <toolkit:TapGestureBehavior Command="{Binding Source={RelativeSource AncestorType={x:Type viewModels:HabitsOverviewViewModel}}, Path=TapCommand}" CommandParameter="{Binding .}" NumberOfTapsRequired="1" /> </Label.Behaviors> </Label>
额外说明
如果非要用EventToCommandBehavior实现,需要先给Label添加TapGestureRecognizer,再通过SourceObject指定行为监听该手势的Tapped事件,但这种写法繁琐冗余,不推荐:
<Label x:Name="TargetLabel" Text="{Binding Name}"> <Label.GestureRecognizers> <TapGestureRecognizer x:Name="LabelTapGesture" /> </Label.GestureRecognizers> <Label.Behaviors> <toolkit:EventToCommandBehavior EventName="Tapped" Command="{Binding Source={RelativeSource AncestorType={x:Type viewModels:HabitsOverviewViewModel}}, Path=TapCommand}" CommandParameter="{Binding .}" SourceObject="{x:Reference LabelTapGesture}" /> </Label.Behaviors> </Label>
内容的提问来源于stack exchange,提问作者askman
相关产品推荐
相关产品推荐

