Public Class MyScrollViewer Inherits ScrollViewer Public Property DeltaMult As Double = 1 Private RealOffset As Double Private Sub MyScrollViewer_PreviewMouseWheel(sender As Object, e As MouseWheelEventArgs) Handles Me.PreviewMouseWheel If e.Delta = 0 OrElse ActualHeight = 0 OrElse ScrollableHeight = 0 Then Exit Sub Dim SourceType = e.Source.GetType If Content.TemplatedParent Is Nothing AndAlso ( (GetType(ComboBox).IsAssignableFrom(SourceType) AndAlso CType(e.Source, ComboBox).IsDropDownOpen) OrElse (GetType(TextBox).IsAssignableFrom(SourceType) AndAlso CType(e.Source, TextBox).AcceptsReturn) OrElse GetType(ComboBoxItem).IsAssignableFrom(SourceType) OrElse TypeOf e.Source Is CheckBox ) Then '如果当前是在对有滚动条的下拉框或文本框执行,则不接管操作 Exit Sub End If e.Handled = True PerformVerticalOffsetDelta(-e.Delta) '关闭 Tooltip (#2552) For Each TooltipBorder In Application.ShowingTooltips AniStart(AaOpacity(TooltipBorder, -1, 100), $"Hide Tooltip {GetUuid()}") Next End Sub Public Sub PerformVerticalOffsetDelta(Delta As Double) AniStart( AaDouble( Sub(AnimDelta As Double) RealOffset = MathClamp(RealOffset + AnimDelta, 0, ExtentHeight - ActualHeight) ScrollToVerticalOffset(RealOffset) End Sub, Delta * DeltaMult, 300,, New AniEaseOutFluent(6))) End Sub Private Sub MyScrollViewer_ScrollChanged(sender As Object, e As ScrollChangedEventArgs) Handles Me.ScrollChanged RealOffset = VerticalOffset If FrmMain IsNot Nothing AndAlso (e.VerticalChange OrElse e.ViewportHeightChange) Then FrmMain.BtnExtraBack.ShowRefresh() End Sub Private Sub MyScrollViewer_IsVisibleChanged(sender As Object, e As DependencyPropertyChangedEventArgs) Handles Me.IsVisibleChanged FrmMain.BtnExtraBack.ShowRefresh() End Sub Public ScrollBar As MyScrollBar Private Sub Load() Handles Me.Loaded ScrollBar = GetTemplateChild("PART_VerticalScrollBar") End Sub Private Sub MyScrollViewer_PreviewGotKeyboardFocus(sender As Object, e As KeyboardFocusChangedEventArgs) Handles Me.PreviewGotKeyboardFocus If e.NewFocus IsNot Nothing AndAlso TypeOf e.NewFocus Is MySlider Then e.Handled = True '#3854,阻止获得焦点时自动滚动 End Sub End Class