Question

J'attache de réaliser une fonctionnalité glisser à défilement dans ma demande et ont des problèmes sur mon chemin. Quelqu'un peut-il me aider? J'ai un ScrollViewer et à l'intérieur d'un ItemsControl et dans ItemsTemplate je UserControl. Je veux que traîner dans les UserControl ItemsControl. Je veux que le ScrollViewer pour faire défiler vers le bas, quand je traînais aux limites du ItemsControl.

protected override void OnPreviewMouseMove(System.Windows.Input.MouseEventArgs e)
{
    if (this.IsMouseCaptured)
    {
        // Get the new mouse position. 
        Point mouseDragCurrentPoint = e.GetPosition(this);

        if (Math.Abs(mouseDragCurrentPoint.Y - this.ActualHeight) <= 50)
        {
            this._scrollStartOffset.Y += 5;
            _containingScrollViewer.ScrollToVerticalOffset(this._scrollStartOffset.Y);
        }
        if (mouseDragCurrentPoint.Y <= 50)
        {
            this._scrollStartOffset.Y -= 5;
            _containingScrollViewer.ScrollToVerticalOffset(this._scrollStartOffset.Y);
        }
    }
    base.OnPreviewMouseMove(e);
}

Quand je commence à glisser en appelant le défilement de DragDrop.DoDragDrop() ne se produit pas. Mais quand je désactiver le déplacement, les rouleaux ScrollViewer dependong vers le bas sur la position de la souris. Peut-être qu'il ya quelque chose que je ne prends pas en accont au sujet de glisser et de capturer la souris? Merci pour l'attention. Karekin

Était-ce utile?

La solution

Lors de l'utilisation DragDrop.DoDragDrop (), j'utilise un sous qui gère l'événement Me.DragOver (en VB) il se présente comme suit. Rappelez-vous, mon contrôle a un ListBox enveloppé dans un ScrollViewer.

Private Sub ListBox_Items_DragOver(ByVal sender As System.Object, ByVal e As System.Windows.DragEventArgs) Handles Me.DragOver
        Dim currentMousePoint As Point = e.GetPosition(_containtingScrollViewer)
        If Math.Abs(currentMousePoint.Y - _containtingScrollViewer.ActualHeight) <= 50 Then
            _containtingScrollViewer.ScrollToVerticalOffset(currentMousePoint.Y + 5)
        End If
        If currentMousePoint.Y <= 50 Then
            _containtingScrollViewer.ScrollToVerticalOffset(currentMousePoint.Y - 5)
        End If
End Sub

Cela me donne la possibilité de faire défiler les éléments tout en faisant glisser. Vous pouvez modifier les tolérances pour obtenir une meilleure / défilement plus fluide si nécessaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top