Frage

Ich bin das Binden eine Drag-to-Scroll-Funktionalität in meiner Anwendung zu erkennen und Probleme auf dem Weg hat. Kann mir jemand helfen? Ich habe einen Scroll und im Inneren ein Items und innerhalb ItemsTemplate Ich habe eine Usercontrol. Ich möchte, dass Usercontrol innerhalb Items ziehen. Ich möchte, dass die Scroll nach unten scrollen, wenn ich an die Grenzen des Items bin ziehen.

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);
}

Wenn ich Ziehen beginnen, indem DragDrop.DoDragDrop() Scrollen Aufruf nicht passiert. Aber wenn ich deaktivieren Ziehen dependong die Scroll nach unten scrollt auf Mausposition. Vielleicht gibt es etwas, das ich nicht die in der accont über Drag-and-Capturing mit der Maus? Danke für die Aufmerksamkeit. Garegin

War es hilfreich?

Lösung

Wenn DragDrop.DoDragDrop () verwenden, verwende ich einen Sub, die das Me.DragOver Ereignis behandelt (in VB) so sieht es wie folgt. Wohlgemerkt, meine Kontrolle hat eine List-Box verpackt in einem Scroll.

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

Das gibt mir die Möglichkeit, während Ziehen Artikel zu blättern. Sie können die Toleranzen optimieren besser / weicheres Scrollen erhalten je nach Bedarf.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top