Question

J'ai besoin d'une zone de liste avec des fonctionnalités similaires à celles d'un iPhone pour Silverlight. C'est-à-dire défilement animé, puis cliquez et faites glisser pour faire défiler. Le défilement se poursuivra un peu après l'événement de souris en fonction du paramètre "vitesse". du traînant. J'ai recherché et trouvé aucun fournisseur de contrôle fournissant ceci. Alors la question est comment devrais-je le construire? J'ai besoin de conseils pour commencer.

Cette question comporte deux parties:

Partie 1, Comment obtenir le défilement animé de la liste déroulante.

Partie 2, Comment créer un " draggable " en faisant défiler, je suppose que je devrais mettre une toile sur le dessus et suivre l’événement de la souris, et simuler un peu de physique. Quelques allusions ici auraient été formidables.

Merci Larsi.

Était-ce utile?

La solution

Il y a quelque temps, j'ai créé un contrôle qui faisait quelque chose comme ça. Tout ce que j'ai fait a été de mettre un stackpanel à l'intérieur d'une toile. Ajustez simplement le canvas.top de tout le stackpanel sur un déplacement de souris (lorsque la souris est enfoncée). Pour animer le défilement après une souris, il vous suffit de suivre le montant déplacé et d’appliquer une animation à la propriété canvas.top.

Autres conseils

Voici un très bel exemple complet pour WPF qui fait défiler à la fois le glisser-déposer et le défilement automatique. Je ne sais pas s'il faudrait changer quelque chose pour que cela fonctionne avec Silverlight.

http: //sachabarbs.wordpress.com/2009/12/24/friction-scrolling-now-an-wpf-attached-behaviour-too/

Juste une note qui dit que vous ne pouvez pas cliquer et faire glisser la vue si vous cliquez sur un enfant (par exemple, des boutons) capturant l'entrée de la souris. En fait, je me suis retrouvé à modifier cet exemple afin que vous puissiez toujours faire glisser le défilement lorsque vous cliquez sur les enfants, tout en permettant aux enfants d'accepter les entrées de la souris lorsque vous ne faites pas défiler.

Cela sera plus facile dans Silverlight 3 que dans Silverlight 2, mais pas impossible dans 2.

Cette vidéo de MIX 09, Création de contrôles Microsoft Silverlight , devrait vous aider.

Autre article du site Web de Sacha Barber:

http://sachabarber.net/?p=481

Jeremiah Morrill partage le code qui implémente le défilement animé avec inertie dans un ContentControl personnalisé (modèle avec un ScrollViewer inclus)

<ScrollViewer x:Name="sv1" Width="500" Height="285">
   <StackPanel x:Name="sp1" Width="450" Height="285">
   </StackPanel>
</ScrollViewer>

En posant pos. et neg. marges au stackpanel à l'intérieur du scrollviewer vous pouvez créer un effet de défilement.

onScroll_Up()
{
  //Change this based on your scrollviewer dimension
  if (this.sv1.ScrollableHeight < 300)
  {
    Thickness thickness = this.sp1.Margin;
    thickness.Top += 50;
    this.sv1.SetValue(StackPanel.MarginProperty, thickness);
  }   
}


onScroll_Down()
{
  if (this.sv1.ScrollableHeight > 1)
  {
    Thickness thickness = this.sp1.Margin;
    thickness.Top += -50;
    this.sv1.SetValue(StackPanel.MarginProperty, thickness);
  }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top