问题描述
我在一个标签中有多个跨度。有些跨度有一个点击事件,有些则没有。如果两个 span 与 tap 事件环绕到同一行,则在最后一个 span 上点击将触发两个 tap 事件。如果这两个跨度不换行并且位于不同的行上,则可以正常工作。
<Label VerticalOptions="Start"
HorizontalTextAlignment="Center"
FontSize="Micro"
Margin="70,70,0"
LineBreakMode="CharacterWrap">
<Label.FormattedText>
<FormattedString>
<Span Text="This text cannot be tapped. " ></Span>
<Span Text="This text can " Textdecorations="Underline">
<Span.GestureRecognizers>
<TapGestureRecognizer Tapped="OnTextOneTapped"/>
</Span.GestureRecognizers>
</Span>
<Span Text="and "></Span>
<Span Text="this text can also be tapped" Textdecorations="Underline">
<Span.GestureRecognizers>
<TapGestureRecognizer Tapped="OnTextTwoTapped"/>
</Span.GestureRecognizers>
</Span>
<Span Text="."></Span>
</FormattedString>
</Label.FormattedText>
</Label>
private void OnTextOneTapped(object sender,EventArgs e)
{
displayAlert("Tap Alert","You Tapped Text One","OK");
}
如果屏幕在不同的行上显示点击的事件文本,则可以正常工作:
无法点按此文本。这段文字可以
,也可以点击。
如果在被点击事件的一部分与另一个被点击事件共享一行的地方发生任何换行,点击两者中的后者将导致两个被点击事件触发:
无法点按此文本。这个文本
可以,这个文本也可以点击。
点击文本“此文本也可以点击”将同时触发 OnTextOneTapped 和 OnTextTwoTapped。点击文本“此文本可以”只会触发 OnTextOneTapped。
我点击的事件跨度是否靠得太近(仅用“和”一词隔开)?我只希望每次点击触发一个点击事件。
解决方法
我为您准备了其他解决方案:
- 解决方案:您使堆栈布局包含多个标签,并执行点击事件。