防止超链接点击冒泡的事件

时间:2013-06-14 22:10:34

标签: silverlight windows-phone routed-events

我正在设计一款Windows Phone应用。我在HyperlinkRichTextBox中有Grid个对象。 Grid发生了Tap事件,Hyperlink发生了Click事件。

点击Hyperlink也会引发父Grid点击事件。我该如何防止这种情况?

我会在e.Handled处理程序中使用Click,但RoutedEventArgs在Silverlight for Windows Phone中没有Handled属性...我也试过走逻辑树来寻找原始来源,但点击似乎来自MS.Internal.RichTextBoxView控件(e.OriginalSource)......

1 个答案:

答案 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_1ContentPanel_Tap_1的回调,但如果您点击Hyperlink,您将获得Hyperlink_Click_1RichTextBox_Tap_1虽然它会在该级别处理并停止。