2010-06-17 10 views
1

J'utilise la vue de liste horizontale dans la liste de sélection. Ce qui continue à bouger de droite à gauche.Comment supprimer l'espace vide du premier élément et du dernier élément de la liste de sélection?

Mon code est:

 double height = canMain.ActualHeight - marqueeList.ActualHeight; 
     marqueeList.Margin = new Thickness(0, 0, 0, 0); 
     doubleAnimation.From = -marqueeList.ActualWidth; 
     doubleAnimation.To = canMain.ActualWidth; 
     doubleAnimation.RepeatBehavior = RepeatBehavior.Forever; 
     doubleAnimation.Duration = new Duration(TimeSpan.FromSeconds(_marqueeTimeInSeconds)); 
     Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath("(Canvas.Right)")); 
     _storyBoard.Children.Add(doubleAnimation); 
     _storyBoard.Begin(marqueeList, true) 

Mais une fois complètement déplacer il y a un espace vide se nouveau jusqu'à ce que le premier élément est pas venu. Je veux enlever l'espace entre les premiers articles au dernier article. (Comme circullar)

S'il vous plaît aidez-moi sur ce ... son urgence !!!

Répondre

2

Si vos articles ListView ne nécessitent pas la souris ou l'interaction du clavier, vous pouvez simplement mettre un rectangle avec une brosse visuelle à droite de celui-ci:

<DockPanel Name="marqueeListTwice"> 
    <ListView Name="marqueeList" .../> 
    <Rectangle Height="{Binding RenderHeight,ElementName=marqueeList}" 
       Width="{Binding RenderWidth,ElementName=marqueeList}"> 
    <Rectangle.Fill> 
     <VisualBrush Visual="{Binding ElementName=marqueeList}" /> 
    </Rectangle.Fill> 
    </Rectangle> 
</DockPanel> 

Cette DockPanel apparaît maintenant avoir deux côte Copies latérales du ListView: Celui de gauche est le vrai, et celui de droite est un Rectangle peint avec une photo de celui-ci. Le mécanisme de peinture de VisualBrush est "parfait" dans le sens où vous ne pouvez pas distinguer la copie peinte de la réalité.

Vous pouvez maintenant animer le contrôle "marqueeListTwice" dans votre zone de dessin pour une distance de marqueeList.ActualWidth. Quand vous arriverez à la fin, vous aurez l'air de regarder le premier objet, mais vous serez en train de regarder l'image peinte sur le rectangle. Lorsque vous revenez à 0, le premier élément "réel" sera à nouveau visible, mais comme il est visuellement identique, vous n'aurez pas autant de scintillement. Si vous avez besoin d'éléments individuels pour interagir avec la souris pendant le panoramique, cette solution ne fonctionnera pas car le rectangle peint ne répondra pas comme prévu: vous aurez besoin de logique pour faire glisser des éléments individuels au lieu de faire glisser un ListView contenant chacun d'eux. Vous pouvez toujours utiliser une animation pour le faire: Il vous suffit d'animer une propriété de votre conteneur Window ou UserControl et de l'utiliser pour calculer le positionnement de votre objet.

+0

Merci pour votre réponse! mais j'ai besoin d'utiliser la souris sur ma liste de sélection donc n'y a-t-il pas d'autre moyen de l'obtenir? –

+0

Oui. Comme je le mentionne dans le dernier paragraphe, vous pouvez utiliser votre propre logique pour faire glisser les éléments exactement où vous le souhaitez au lieu d'utiliser un ListView pour le faire pour vous. Je le ferais avec une sous-classe de panneau personnalisée. Le panneau personnalisé aurait une propriété "Offset" qui pourrait compter de 0 à 1 ou de 0 à ItemCount. Cette propriété aura l'indicateur InvalidatesArrange défini. Ensuite, dans votre ArrangeOverride, vous calculerez les emplacements de tous les enfants en utilisant la valeur Offset, les tailles enfants, etc. Les détails de ce calcul dépendent de vos besoins spécifiques. –

+0

Pour que la liaison de données fonctionne avec un panneau personnalisé, vous pouvez continuer à utiliser ListView et définir sa propriété ItemsPanel à ItemsPanelTemplate qui contient une instance de votre classe de panneaux personnalisés avec sa propriété Offset liée comme vous le souhaitez. Ensuite, il suffit d'animer la propriété à laquelle ce décalage est lié, ce qui entraînera la mise à jour de la propriété Offset et le recalcul des positions de l'outil ArrangeOverride. –

Questions connexes