我正在设计一款Windows Phone应用。我在Hyperlink
,RichTextBox
中有Grid
个对象。 Grid
发生了Tap
事件,Hyperlink
发生了Click
事件。
点击Hyperlink
也会引发父Grid
点击事件。我该如何防止这种情况?
我会在e.Handled
处理程序中使用Click
,但RoutedEventArgs
在Silverlight for Windows Phone中没有Handled属性...我也试过走逻辑树来寻找原始来源,但点击似乎来自MS.Internal.RichTextBoxView
控件(e.OriginalSource
)......
答案 0 :(得分:1)
我认为Click
处理程序本身没有任何好的方法。以下状态管理可以工作:
XAML:
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0" Tap="ContentPanel_Tap_1">
<RichTextBox Tap="RichTextBox_Tap_1">
<Paragraph>
fdsfdfdf
<Hyperlink Click="Hyperlink_Click_1">fdsfdsfsaf</Hyperlink>
fsdfsdfa
</Paragraph>
</RichTextBox>
</Grid>
和代码:
bool RtbTapHandled = false;
private void Hyperlink_Click_1(object sender, RoutedEventArgs e)
{
System.Diagnostics.Debug.WriteLine("Hyperlink");
RtbTapHandled = true;
}
private void RichTextBox_Tap_1(object sender, System.Windows.Input.GestureEventArgs e)
{
if (RtbTapHandled)
{
e.Handled = true;
}
RtbTapHandled = false;
System.Diagnostics.Debug.WriteLine("RTB_Tap");
}
private void ContentPanel_Tap_1(object sender, System.Windows.Input.GestureEventArgs e)
{
System.Diagnostics.Debug.WriteLine("Content_Tap");
}
在这种情况下,如果您点击RichTextBox
,您将获得RichTextBox_Tap_1
和ContentPanel_Tap_1
的回调,但如果您点击Hyperlink
,您将获得Hyperlink_Click_1
和RichTextBox_Tap_1
虽然它会在该级别处理并停止。