首页 > 基础资料 博客日记

为 Avalonia 启用平滑滚动与缩放

2026-04-09 18:30:01基础资料围观1

极客资料网推荐为 Avalonia 启用平滑滚动与缩放这篇文章给大家,欢迎收藏极客资料网享受知识的乐趣

为 Avalonia 启用平滑滚动与缩放

在 Avalonia 中,ScrollViewer 在鼠标滚轮下是没有平滑滚动的,看起来非常生硬。同时, ScrollViewer 也不支持平移、缩放等操作,这使得社区不得不使用为 PanAndZoom 等第三方控件

为此,我编写了 SmoothScroll.Avalonia 库,可以为应用中的所有 ScrollViewer 一键启用平滑滚动支持。同时,库中提供的 ScrollView 控件(继承自 ScrollViewer)还增加了平移和缩放功能

注意: 这是一个实验性项目

当前实现需要使用 Avalonia 渲染层的一些内部 API

效果如下:

20260409-1018-26

使用方式

启用 ScrollViewer 的平滑滚动

安装 NuGet 包后,只需将 ScrollViewerSmoothTheme 添加到 Application.Styles 中即可

<Application
    xmlns:smoothScroll="using:SmoothScroll.Avalonia.Controls">

    <Application.Styles>
        <... />
        <smoothScroll:ScrollViewerSmoothTheme />
    </Application.Styles>
</Application>

如果需要自定义样式,在你自己编写的 ScrollViewer 样式中将 ScrollContentPresenter 替换为包内提供的 ScrollPresenter 也可实现相同效果

使用 ScrollView 进行平移与缩放

ScrollView 是一个独立的控件。使用前,需要添加默认样式:

<Application
    xmlns:smoothScroll="using:SmoothScroll.Avalonia.Controls">

    <Application.Styles>
        <... />
        <smoothScroll:ScrollViewDefaultTheme />
    </Application.Styles>
</Application>

它继承自 ScrollViewer,因此你可以将应用中的 ScrollViewer 直接替换为 ScrollView 来单独启用某处的平滑滚动。但与 ScrollViewer 不同的是,此控件还额外提供了缩放相关的属性和方法:

属性/方法 描述
bool IsZoomEnabled 是否启用缩放
double ZoomFactor 当前缩放倍率 (只读)
double MinZoomFactor 最小缩放倍率
double MaxZoomFactor 最小缩放倍率
void ZoomTo(double) 缩放到指定倍率
void ZoomBy(double) 按指定增量进行缩放

例如,你可以将 Image 放入 ScrollView 中来创建一个图片查看器

<smoothScroll:ScrollView
    HorizontalContentAlignment="Center"
    VerticalContentAlignment="Center"
    IsZoomEnabled="True"
    HorizontalScrollBarVisibility="Hidden"
    VerticalScrollBarVisibility="Hidden">
    <Image Source="avares://SmoothScroll.Avalonia.Sample/Assets/Images/4074.bmp" Stretch="UniformToFill" />
</smoothScroll:ScrollView>

image

实现细节将会在下篇文章中进一步介绍!


文章来源:https://www.cnblogs.com/BettaFish/p/19842673
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!

标签:

相关文章

本站推荐

标签云