2013-06-14 3 views
0

Я разрабатываю приложение Windows Phone. У меня есть объект Hyperlink в RichTextBox, в Grid. Grid имел событие Tap, а Hyperlink имеет событие Click.Предотвратить гиперссылку Нажмите событие от пузырьков вверх

Нажатие на Hyperlink также вызывает родительский ответ Grid. Как я могу это предотвратить?

Я хотел бы использовать e.Handled в Click обработчике, но RoutedEventArgs не имеет Handled свойства в Silverlight для Windows Phone ... Я также пытался ходить логическое дерево искать первоисточник, но щелчок по-видимому, происходит от MS.Internal.RichTextBoxView управление (e.OriginalSource) ...

ответ

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, хотя он будет обработан на этом уровне и остановлен.

+0

Yup, это довольно аккуратно. Благодаря! –

Смежные вопросы