36 votes

LongListSelector: Item Tap?

Je suis à l'aide de LongListSelector contrôle sur Windows Phone 8 et ne peuvent pas comprendre la meilleure façon de gérer un clic sur un élément. Les quelques exemples que j'ai trouvé compter sur l'événement SelectionChanged. Cependant, cette solution est buggé parce que si je tape un article qui ouvre une nouvelle page, frapper en arrière, puis appuyez sur le même élément nouveau, ça ne fonctionne pas parce que ce point est déjà sélectionné, de sorte SelectionChanged n'est pas déclenché.

J'ai essayé de m'inscrire à la appuyez sur un événement et utiliser le courant de l'élément sélectionné comme le tapait un, mais quelques fois le courant de l'élément sélectionné n'est pas celui que j'attends.

J'ai pu me faire une ItemTemplate dans un bouton et poignée du robinet pour chaque élément, mais j'ai besoin de reskin le bouton pour la faire ressembler à un simple élément de la liste.

Enfin, je ne comprends pas pourquoi c'est si compliqué à atteindre une telle chose fondamentale. Est-il simple et normalisée j'ai raté?

Mon deuxième souhait est d'avoir un effet sur l'élément lorsqu'il est exploité. Est-il un moyen standard pour le faire?

41voto

Stevie Points 690

Vous pourriez null votre LongListSelector de l' SelectedItem à la fin de chaque SelectionChanged événement. I. e.

<phone:LongListSelector x:Name="LLS" SelectionChanged="LLS_SelectionChanged">

Et le gestionnaire d'événements:

private void LLS_SelectionChanged(object sender, SelectionChangedEventArgs e) {

  // If selected item is null, do nothing
  if (LLS.SelectedItem == null)
    return;

  // Navigate to the next page
  NavigationService.Navigate(new Uri("/nextpage.xaml", UriKind.Relative));

  // Reset selected item to null
  LLS.SelectedItem = null;
}

Vous aurez le feu de l'événement SelectionChanged deux fois, mais rien ne va se passer le second tour de temps, et vous devriez obtenir le comportement que vous êtes à la recherche pour - (j'.e Réglage SelectedItem de null déclenche un nouveau SelectionChanged événement, mais le deuxième événement est pris dans le if)

Comme pour la deuxième partie de votre question, vous pourriez être mieux de poster une nouvelle question.

9voto

gleb.kudr Points 898

Je l'ai fait avec le Appuyez sur un événement de la manipulation.

Je préfère ne pas utiliser de propriété Sélectionnée, mais obtenir taraudés élément de cette façon (et je n'ai pas remarqué de bugs):

MyListItemClass item = ((FrameworkElement)e.OriginalSource).DataContext 
                                                             as MyListItemClass;

Aussi, vous pourriez obtenir de l'élément d'origine ContentPresenter simple, en allant jusqu'par VisualTree à partir de l'e.OriginalSource. De cette façon:

ContentPresenter itemPresenter = SomeHelperClass
                              .FindParent<ContentPresenter>(e.OriginalSource,"");

Où FindParent est similaire à trouver l'enfant dans cette question: WPF façons de trouver des contrôles

ContentPresenter est l'objet de ce que vous avez besoin de modifier manuellement l'élément de modèle si vous le souhaitez (à définir "sélectionné" par exemple).

1voto

Poojan Dave Points 41
 private void Item_tap(object sender, RoutedEventArgs e)
        {
            var element = (FrameworkElement)sender;
            DataSource data = (DataSource)element.DataContext;


        }

0voto

halil Points 101

Mon deuxième souhait est d'obtenir un effet sur l'élément lorsqu'il est exploité. Y a-t-il un moyen standard de le faire?

Pour cela, la seule chose que vous devez faire ajoute ceci à votre contrôle (ou stackpanel où vous voulez avoir cet effet):

 <StackPanel toolkit:TiltEffect.IsTiltEnabled="True">
 

0voto

AVIK DUTTA Points 106

ajoutez d'abord ceci à la page * .xaml à l'intérieur du

 LongListSelectorSelectionChanged="listBox_SelectionChanged"
 

de sorte qu'il ressemble à ceci:

 <toolkit:LongListSelector x:Name="listBox" SelectionChanged="listBox_SelectionChanged">
 

puis dans le fichier * .xaml.cs dans le gestionnaire d'événements

 private void listBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    // Write your logic on what you want to do with the selected item
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X