2013-01-19 7 views
3

Dans le XAML suivant lorsqu'un TextBlock est sélectionné dans LongListMultiSelector, que TextBlock arrêts RECEVOIR événement Tap (et tout autre événement de geste) mais devient plutôt quand je tape désélectionné à nouveau. Comment est-ce que je peux changer ce comportement tel que TextBlock répondra toujours à Tap indépendamment de son état de sélection?blocs LongListMultiSelector événements de mouvement pour les articles sélectionnés

<toolkit:LongListMultiSelector ItemsSource="{Binding Items}"> 
    <toolkit:LongListMultiSelector.ItemTemplate> 
     <DataTemplate> 
      <!-- When TextBlock is selected, Debug_WriteLine_Tapped does not get called --> 
      <TextBlock Text="{Binding name}" Tap="Debug_WriteLine_Tapped" /> 
     </DataTemplate> 
    </toolkit:LongListMultiSelector.ItemTemplate> 
</toolkit:LongListMultiSelector> 

Fondamentalement, ce que je cherche est un comportement similaire à celui de l'application de messagerie par où après avoir sélectionné un tas de lettres ils reçoivent encore Tap des événements parce que je peux encore ouvrir/fermer l'un d'eux (sauf que dans mon cas c'est un simple TextBlock s et non ExpanderView s).

Répondre

0

Fonctionne correctement sur ma machine. Lorsque je tape ces 3 éléments, je reçois les messages attendus dans le journal de débogage.

<phone:LongListSelector ItemsSource="{Binding}"> 
    <phone:LongListSelector.ItemTemplate> 
     <DataTemplate> 
      <Grid > 
       <TextBlock Text="{Binding}" Tap="TextBlock_Tap_1" /> 
      </Grid> 
     </DataTemplate> 
    </phone:LongListSelector.ItemTemplate> 
</phone:LongListSelector> 
private void MainPage_Loaded(object sender, RoutedEventArgs e) 
{ 
    this.DataContext = "Foo Bar Baz".Split(' '); 
} 

private void TextBlock_Tap_1(object sender, GestureEventArgs e) 
{ 
    Debug.WriteLine("TextBlock_Tap_1"); 
} 

En fonction de votre scénario WP8 expose la propriété UseOptimizedManipulationRouting qui pourrait se révéler utile. Si vous définissez UseOptimizedManipulationRouting = false, les contrôles LongListSelector, Pivot et autres ne permettent pas d'avaler des événements pour les contrôles imbriqués. Un bon endroit pour définir ce serait sur le contrôle de la racine de votre LongListSelector.ItemTemplate.

+0

J'ai juste essayé de définir 'UseOptimizedManipulationRouting' sur false sur' LongListMultiSelector' et cela n'a pas aidé. Le bloc de texte sélectionné n'est toujours pas sélectionné au lieu de répondre à Tap. – Anton

+0

Je n'ai aucun problème avec 'LongListSelector' car les éléments ne peuvent pas être sélectionnés ici. Dans 'LongListMultiSelector', quand l'élément n'est pas sélectionné, il répond comme il le devrait et je vois la sortie dans la console. Mais une fois qu'il est sélectionné, il est possible de ne plus le sélectionner, de ne pas déclencher l'événement, c'est le comportement dont je voudrais me débarrasser. – Anton

+0

Peut-être que j'utilise les mots faux, sous "élément sélectionné" je veux dire un élément qui a une case à cocher cochée devant lui dans 'LongListMultiSelector'. – Anton

0

La boîte à outils utilise cette signature pour répondre au tap.

private void OnItemContentTap(object sender, System.Windows.Input.GestureEventArgs e) 

L'échantillon définit le DataTemplate séparé de la LongListMultiSelector construction dans la section

<phone:PhoneApplicationPage.Resources> 

et références comme il

ItemTemplate="{StaticResource EmailItemTemplate}. 

Voir LongListMultiSelectorSample.xaml dans la boîte à outils pour l'exemple. L'échantillon est incomplet et peut prêter à confusion au début. Ignorez simplement le BuddiesPivotItem et le GridModeItem, à moins que vous ne vouliez le finir et que tout fonctionne.

Questions connexes