public class ExtendedScrollViewer : ScrollViewer
{
protected override void OnMouseWheel(MouseWheelEventArgs e)
{
if (ViewportHeight + VerticalOffset >= ExtentHeight && e.Delta <= 0)
return;
if (VerticalOffset == 0 && e.Delta >= 0)
return;
base.OnMouseWheel(e);
}
}
最近有人提到能不能运用附加属性处置,所以我就试试。暂时发现简单地用附加属性处置,除非查找 VisualTree 上的父节点 ScrollView 并调用它的 LineUp 和 LineDown ,全部代码如下:
Copy
public class ScrollViewerService
{
///
/// 从指定元素获取 CanScrollOuter 依赖项属性的值。
///
/// 从中读取属性值的元素。
/// 附属性存储获取的属性值。
public static bool GetCanScrollOuter(DependencyObject obj) => (bool)obj.GetValue(CanScrollOuterProperty);
///
/// 将 CanScrollOuter 依赖项属性的值设置为指定元素。
///
/// 对其设置属性值的元素。
/// 要设置的值。
public static void SetCanScrollOuter(DependencyObject obj, bool value) => obj.SetValue(CanScrollOuterPro