MyScrollViewer.vb 1.5 KB

123456789101112131415161718192021222324252627
  1. Public Class MyScrollViewer
  2. Inherits ScrollViewer
  3. Public Property DeltaMuity As Double = 1
  4. Private RealOffset As Double
  5. Private Sub MyScrollViewer_PreviewMouseWheel(sender As Object, e As MouseWheelEventArgs) Handles Me.PreviewMouseWheel
  6. If e.Delta = 0 OrElse ActualHeight = 0 OrElse ScrollableHeight = 0 Then Exit Sub
  7. Dim SourceTypeName As String = e.Source.GetType.Name
  8. If Content.TemplatedParent Is Nothing AndAlso (SourceTypeName.Contains("Combo") OrElse SourceTypeName = "MyTextBox") Then Exit Sub '确定可视树,防止滚动问题
  9. PerformVerticalOffsetDelta(-e.Delta)
  10. e.Handled = True
  11. End Sub
  12. Public Sub PerformVerticalOffsetDelta(Delta As Double)
  13. AniStart(AaDouble(Sub(AnimDelta As Double)
  14. RealOffset = MathRange(RealOffset + AnimDelta, 0, ExtentHeight - ActualHeight)
  15. ScrollToVerticalOffset(RealOffset)
  16. End Sub, Delta * DeltaMuity, 300,, New AniEaseOutFluent(6)))
  17. End Sub
  18. Private Sub MyScrollViewer_ScrollChanged(sender As Object, e As ScrollChangedEventArgs) Handles Me.ScrollChanged
  19. RealOffset = VerticalOffset
  20. If FrmMain IsNot Nothing AndAlso (e.VerticalChange OrElse e.ViewportHeightChange) Then FrmMain.BtnExtraBack.ShowRefresh()
  21. End Sub
  22. Private Sub MyScrollViewer_IsVisibleChanged(sender As Object, e As DependencyPropertyChangedEventArgs) Handles Me.IsVisibleChanged
  23. FrmMain.BtnExtraBack.ShowRefresh()
  24. End Sub
  25. End Class